Autor Zpráva
Glob
Profil *
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
Co konkretne ti vrati tento dotaz alebo vrati nejaku chybu?
Glob
Profil *
#1064 - You have an error in your SQL syntax near 'SELECT id_knihy
FROM vypujcky
WHERE id_cloveka' at line 5
nightfish
Profil
Glob
jaká verze mySQL?
Glob
Profil *
mám to na lokále na starší verzi 3.23.58-nt, která ovšem IN podporuje
nightfish
Profil
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 *
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 *
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 *
Ř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
Toto téma je uzamčeno. Odpověď nelze zaslat.

0