Autor Zpráva
Kwoky
Profil *
Potýkám se s (pro mě) velice zajímavým problémem. Následující dotaz vrací 2237 výsledků:
SELECT *FROM stanice

Pokud dotaz "obohatím" o JOIN, vrací jen 2209 výsledků (což je špatně):
SELECT *FROM stanice JOIN mesto ON stanice.stanice_mesto = mesto.mesto_id

Dá se zjistit, které výsledky se JOINem "vyřadily" a proč? Neměly se vyřadit.
Podotýkám, že sloupce stanice_mesto ani mesto_id neobsahují hodnotu NULL.

Děkuji za každou radu.
Alphard
Profil
Asi tam něco chybí. Použijte left join.
Kwoky
Profil *
LEFT JOIN vrací opravdu 2237 výsledků, což je správně. Děkuji.
Doplňující otázka. Dá se nějak zjistit doplněk SELECTu? Tedy všechny výsledky, které NEodpovídají zadaným parametrům?
Alphard
Profil
Zkuste tohle:
select * from stanice left join mesto on stanice.stanice_mesto = mesto.mesto_id where mesto.mesto_id is null
Kwoky
Profil *
Perfektní. Ukázalo mi to seznam, který jsem potřeboval vidět k odstranění chyby (v datech jsem měl přiřazený špatný index města).
Má doplňující otázka platila obecně, ne jen na tento konkrétní příklad (i když i tak mi odpověď pomohla). Jak tedy obecně napsat dotaz tak, aby se do výsledků dostaly jen řádky, které podmínky NEsplnily?
Joker
Profil
Kwoky:
Jak tedy obecně napsat dotaz tak, aby se do výsledků dostaly jen řádky, které podmínky NEsplnily?
Tak asi nejobecnější řešení bude:
SELECT id FROM tabulka WHERE id NOT IN (SELECT tabulka.id FROM ...a zbytek jako v původním dotazu)


Ale leckdy to bude zbytečné, třeba jde-li o WHERE podmínku, stačí obrátit podmínku.
Kwoky
Profil *
Děkuji, bude se mi to hodit při hledání chyb. Chápu, že stačí obrátit podmínku, ale to leckdy může být dost pracné.
Kajman_
Profil *
Rozdíl ve výsledku dvou dotazů umí zvýraznit mysql query browser.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: