Autor | Zpráva | ||
---|---|---|---|
Martin Profil |
#1 · Zasláno: 7. 10. 2007, 01:22:52
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 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 |
#2 · Zasláno: 7. 10. 2007, 09:00:53
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 |
#3 · Zasláno: 7. 10. 2007, 16:12:54
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 * |
#4 · Zasláno: 7. 10. 2007, 21:59:48
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 |
||
Časová prodleva: 4 dny
|
|||
Martin Profil |
#5 · Zasláno: 11. 10. 2007, 20:25:36
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 |
#7 · Zasláno: 11. 10. 2007, 20:47:01
Kajman_
Děkuju moc, dal jsem to dohromady, čekal jsem něco složitějšího. |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0