Autor | Zpráva | ||
---|---|---|---|
Glob Profil * |
#1 · Zasláno: 29. 1. 2007, 16:35:43
Ahoj,
nedaří se sestavit SQL dotaz, který by vykonal následující: Mám tabulku s knížkama, podstatné jsou sloupce id_knihy a nazev_knihy. Příklad tabulky: id_knihy, nazev_knihy 1, 100 divů přírody 2, Encyklopedie pro děti Dále mám tabulku s organizacema: id_org, nazev_org 1, Organizace 1 2, Organizace 2 3, Organizace 3 Další je tabulka lidé, kteří jsou rozřazeni do organizací. id_cloveka, organizace, jmeno 1, 2, Karel Novák 2, 1, Franta Jiný Poslední tabulka jsou výpujčky, kde si eviduju která osoba má kterou knížku. id_knihy, id_cloveka 1, 2 A teď to problémové, potřebuju vypsat seznam pro organizaci těch knih, které nemá půjčené nikdo z jejich lidí. Tedy jedinné co znám, je id_org a já potřebuju v jednom dotazu vytáhnout: A = všechny lidi z organizace id_org B = knihy, které má půjčené někdo z A C = všechny knihy, které nejsou v B Následně seznam knih v C vypsat. Tady je ještě můj nefunkční pokus: SELECT id_knihy, nazev_knihy FROM knihy WHERE id_knihy NOT IN ( SELECT id_knihy FROM vypujcky WHERE id_cloveka IN ( SELECT id_cloveka FROM lide WHERE id_org = 1 ) ) Díky za pomoc. |
||
temistokles Profil |
#2 · Zasláno: 29. 1. 2007, 18:25:16
Co konkretne ti vrati tento dotaz alebo vrati nejaku chybu?
|
||
Glob Profil * |
#3 · Zasláno: 29. 1. 2007, 21:55:23
#1064 - You have an error in your SQL syntax near 'SELECT id_knihy
FROM vypujcky WHERE id_cloveka' at line 5 |
||
nightfish Profil |
#4 · Zasláno: 29. 1. 2007, 23:49:22
Glob
jaká verze mySQL? |
||
Glob Profil * |
#5 · Zasláno: 30. 1. 2007, 01:12:00
mám to na lokále na starší verzi 3.23.58-nt, která ovšem IN podporuje
|
||
nightfish Profil |
#6 · Zasláno: 30. 1. 2007, 01:26:52
Glob
IN jako operátor je dostupný i ve starších verzích nicméně problém způsobují vnořené selecty... ty v mysql 3.23 rozhodně podporovány nejsou |
||
Kajman_ Profil * |
#7 · Zasláno: 30. 1. 2007, 08:54:29
Dotaz jde zapsat i pro 3.23, ale pokud s tím nemáte problém, doporučil bych přechod na 4.1+ vnořené dotazy zpřehledňují zápis a nejspíš buodu i o chlup rychlejší.
|
||
Glob Profil * |
#8 · Zasláno: 30. 1. 2007, 10:28:52
A mohu se zeptat jak by ten dotaz vypadal pro verzi 3.23 (co tedy použít když ne vnořené selecty)?
Updatu mysql bych se rád vyhl. Díky. |
||
Kajman_ Profil * |
#9 · Zasláno: 30. 1. 2007, 12:55:12
Řeší se to přibližně takto...
SELECT k.id_knihy, k.nazev_knihy FROM knihy k LEFT JOIN vypujcky v ON (k.id_knihy=v.id_knihy) LEFT JOIN lide l ON (v.id_cloveka=l.id_cloveka and l.id_org=1) WHERE l.id_cloveka is null |
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0