Autor Zpráva
Martin
Profil
Ahoj,
mám tabulky například auta (id, nazev), spojovaci_tabulka(id, id_auta, id_barvy), barvy (id, barva). Potřeboval bych teď vypsat všechna auta a pokud je id auta uvedeno ve spojoací tabulce, tak k němu vypsat i barvu, jinak bych potřeboval vrátit prázdnou hodnotu. Sloučit tabulky umím, ale pokud by nebyla u auta uvedena barva, tak mi se mi auto nevypíše. Snad je to dobře pochopitelné.
Šel jsem na to přibližně takto

SELECT * FROM auta, spojovaci_tabulka, barvy WHERE auta.id = spojovaci_tabulka.id_auta AND spojovaci_tabulka.id_barvy = barvy.id


S tímto dotazem mám problém uvedený výše. Jak byste to řešili Vy? Zkusil bych to pomocí LEFT JOIN, ale v dotazu mám takové "spojovaci_tabulky" stejného typu 3 a nevím, jak dotaz přepsat. Díky za rady
Joker
Profil
auta LEFT JOIN spojovaci_tabulka LEFT JOIN barvy ...nějak takhle to jde.

Ovšem u takhle napsaného dotazu se vyrobí kartézský součin tří tabulek a potom se z něj vybírají záznamy s odpovídajícím ID.
Lepší by bylo tu omezující podmínku dát přímo při spojování tabulek.

SELECT sloupec FROM auta a LEFT JOIN spojovaci_tabulka s ON a.id=s.id_auta LEFT JOIN barvy b ON s.id_barvy=b.id
(samozřejmě za chyby v dotazu neručím)
Martin
Profil
Díky, nějak to vyzkoušim.
Ve skutečném dotazu mám tabulky
vyrobky (id, popisek)
auta (id, id_vyrobku),
spojovaci_tabulka_1 (id, id_auta, id_hodnoty_1),
hodnoty_1,
spojovaci_tabulka_2 (id, id_auta, id_hodnoty_2),
hodnoty_2,
spojovaci_tabulka_3 (id, id_auta, id_hodnoty_3),
hodnoty_3

a to bych potřeboval nějak pospojovat, aby se vypsali všechna auta a k nim popisek z tabulky vyrobky a další hodnoty na základě spojení přes spojovací tabulky. Nechci sem vkládat celý dotaz, je straštně dlouhý. JOIN s více než dvěma tabulkami jsem nějak nezvládl.
Kajman_
Profil *
select *
from
auta a
left join vyrobky v on a.id_vyrobku=v.id
left join spojovaci_tabulka_1 t1 on a.id=t1.id_auta
left join spojovaci_tabulka_2 t2 on a.id=t2.id_auta
left join spojovaci_tabulka_3 t3 on a.id=t3.id_auta
Martin
Profil
Kajman_
Díky moc, jak do toho ještě prosím zapasuju tabulky hodnoty_1, hodnoty_2, hodnoty_3 (id, ....)
Kajman_
Profil *
Co třeba něco na způsob?
left join hodnoty_1 h1 on t1.id_hodnoty_1=h1.id
Martin
Profil
Kajman_
Děkuju moc, dal jsem to dohromady, čekal jsem něco složitějšího.
Toto téma je uzamčeno. Odpověď nelze zaslat.