Autor | Zpráva | ||
---|---|---|---|
Pavel Dumbrovský Profil |
#1 · Zasláno: 27. 7. 2011, 16:56:31
Dobrý den,
motám se v tom, jak vypsat ty položky z jedné tabulky, které nejsou v druhé tabulce. 2 tabulky: produkty a obrazky_produktu Teoreticky by měly mít stejný počet řádků, ale v praxi tomu tak není, některé produkty nemají obrázek a já potřebuji zjistit které produkty to jsou. V tabulce produkty máme sloupec id a v tabulce obrazky_produktu sloupec produkt_id , které by si měly odpovídat. Jak na to? Zkoušel jsem left join, right join, outer join, nic z toho mi nefunguje. SELECT id FROM produkty LEFT JOIN obrazky_produktu ON produkty.id=produkt_id Jdu na to špatně, respektive jak na to jít jinak? :) Děkuju |
||
Kajman_ Profil * |
#2 · Zasláno: 27. 7. 2011, 16:59:58
Je to jedna z možností, jen přidáte
... where produkt_id is null |
||
Pavel Dumbrovský Profil |
#3 · Zasláno: 27. 7. 2011, 17:11:20
Tak přesně to jsem udělal a čekal jsem asi 15 minut na výsledek a nic, nerad bych klientovi shodil server.. :)
Pak jsem ještě zkoušel možnost s "is NOT in" a to dělal to samé.. Že by to souviselo s tím, že každá ta tabulka má asi 15.000 řádků? |
||
Kajman_ Profil * |
#4 · Zasláno: 27. 7. 2011, 17:23:38
Pokud jsou indexy na obou používaných sloupcích, tak by to při takovém malém počtu řádků mělo být cobydup.
Na některých starších verzích se občas not in sytaxe naplánovala semtam špatně a rychlejší bylo právě left join a where, ale teď to bude asi nastejno. |
||
Pavel Dumbrovský Profil |
#5 · Zasláno: 27. 7. 2011, 17:56:32
S indexy si nejsem jisty, ale myslím že nejsou.. Každopádně už mám po 20 minutách výsledek, vypsalo to dva řádky, hurá.. :D Díky za pomoc.
|
||
Ofi Profil |
#6 · Zasláno: 28. 7. 2011, 10:56:01
můžeš to udělat vnořeným selectem:
SELECT id FROM produkty WHERE ID NOT IN (SELECT DISTINCT produkt_id FROM obrazky_produktu) vnořený select vytvoří pole všech product_id z tabulky obrázků. |
||
Časová prodleva: 13 let
|
0