Autor | Zpráva | ||
---|---|---|---|
Kwoky Profil * |
#1 · Zasláno: 5. 10. 2009, 23:21:57
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 |
#2 · Zasláno: 5. 10. 2009, 23:40:02
Asi tam něco chybí. Použijte left join.
|
||
Kwoky Profil * |
#3 · Zasláno: 5. 10. 2009, 23:45:59
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 |
#4 · Zasláno: 5. 10. 2009, 23:49:51
Zkuste tohle:
select * from stanice left join mesto on stanice.stanice_mesto = mesto.mesto_id where mesto.mesto_id is null |
||
Kwoky Profil * |
#5 · Zasláno: 6. 10. 2009, 12:09:50
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 |
#6 · Zasláno: 6. 10. 2009, 12:20:33
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 * |
#7 · Zasláno: 6. 10. 2009, 12:48:28
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 * |
#8 · Zasláno: 6. 10. 2009, 19:36:52
Rozdíl ve výsledku dvou dotazů umí zvýraznit mysql query browser.
|
||
Časová prodleva: 15 let
|
0