Portál AbcLinuxu, 25. července 2025 05:02


Dotaz: Použití predikátu EXISTS v SQL dotazu

5.1.2012 12:03 Medved
Použití predikátu EXISTS v SQL dotazu
Přečteno: 715×
Odpovědět | Admin
Dobrý den, prosím o radu. Mám následující SQL dotaz:

SELECT id FROM auto
WHERE NOT EXISTS(SELECT * FROM auto, pracovnik
WHERE pracovnik.auto=auto.id;
Smyslem dotazu je, aby mi vrátil id auta, které nemá záznam v tabulce pracovnik. Tedy není mu přidělen žádný pracovník. Jenže tenhle dotaz mi vrací
No rows selected
ikdyž vím, že mám v db neobsazená auta, tedy mezi tabulkou auto a pracovník žádná vazba doopravdy není. Kde dělám prosím v dotazu chybu? Díky.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

5.1.2012 12:20 NN
Rozbalit Rozbalit vše Re: Použití predikátu EXISTS v SQL dotazu
Odpovědět | | Sbalit | Link | Blokovat | Admin
V dotazu neni konec zavorky..

NN
5.1.2012 12:26 Medved
Rozbalit Rozbalit vše Re: Použití predikátu EXISTS v SQL dotazu
Jasně, to je jen překlep tady. Ale ve skutečnosti jí tam samozřejmě mám jinak by mi to vrátilo error.
Řešení 1× (Sectio Aurea)
5.1.2012 12:28 jekub
Rozbalit Rozbalit vše Re: Použití predikátu EXISTS v SQL dotazu
Odpovědět | | Sbalit | Link | Blokovat | Admin
chyba je v poddotazu, kde pouzivate spojeni tabulek auto a pracovnik. Tj. pokud existuje alespon jeden zaznam, kde pracovnik ma vyplnen auto, nedostanete ve vysledku zadne radky.

Zkuste
SELECT id FROM auto
WHERE NOT EXISTS(SELECT * FROM pracovnik
WHERE pracovnik.auto=auto.id
);
5.1.2012 12:36 Medved
Rozbalit Rozbalit vše Re: Použití predikátu EXISTS v SQL dotazu
Jasně, ono je to vlastně logické. Díky za upozornění, vyřešeno.
Tarmaq avatar 5.1.2012 15:51 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Použití predikátu EXISTS v SQL dotazu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ja bych to resil pomoci EXCEPT/MINUS.. IMHO nejcistsi reseni..
SELECT id FROM auto
EXCEPT
SELECT auto FROM pracovnik;
pro MySQL a jine DB toto nepodporujici lze prepsat na:
SELECT id FROM auto
WHERE id NOT IN (SELECT auto FROM pracovnik);
Don't panic!
7.1.2012 20:28 Pavel
Rozbalit Rozbalit vše Re: Použití predikátu EXISTS v SQL dotazu
Odpovědět | | Sbalit | Link | Blokovat | Admin

A co dotaz pro zjisteni neobsazenych aut:

 

SELECT auto.id FROM auto

LEFT JOIN pracovnik ON auto.id=pracovnik.auto

WHERE pracovnik.id is NULL;

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.