Autor Zpráva
Pavel Dumbrovský
Profil
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 *
Je to jedna z možností, jen přidáte
... where produkt_id is null
Pavel Dumbrovský
Profil
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 *
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
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
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ů.

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:

0