Autor | Zpráva | ||
---|---|---|---|
VaKvas Profil |
Zdravím a prosím o radu.
Mám tabulky DOKUMENTY, ZAKAZKY, KLIENTI a PROVOZOVNY Tabulka DOKUMENTY ma id_zakazky. Tabulka ZAKAZKY ma id_klienta a tabulka KLIENTI ma id_provozovny. Potrebuji k SELECTU dokumentu dotanout nazev provozovny :-) Udelal jsem toto, ale me se ty subselecty moc nelibi.. jak jinak by to ještě slo prosim? SELECT id, name, is_contract, (SELECT name FROM branches WHERE id = (SELECT branch FROM clients WHERE is_contract = id )) AS client FROM `documents` Diky! |
||
juriad Profil |
#2 · Zasláno: 21. 5. 2015, 15:41:42
Použij JOINy:
SELECT d.*, p.nazev FROM dokumenty d JOIN zakazky z ON d.id_zakazky = z.id JOIN klienty k ON z.id_klienta = k.id JOIN provozovny p ON k.id_provozovky = p.id WHERE d.id = 234; |
||
Časová prodleva: 4 dny
|
|||
VaKvas Profil |
Jo, to se mi líbí víc, Díky! :)
Jen ještě jedna věc, prosím. Takto vypadá dotaz, přesně dle tabulek: SELECT d.*, b.name FROM documents d JOIN contracts c ON d.is_contract = c.id JOIN clients cl ON c.clients_id = cl.id JOIN branches b ON cl.branch = b.id ALE některé dokumenty mají hodnotu "is_contract" - kde je uloženo číslo zakázky "0" , tedy nepatří k žádné zakázce. A ty já potřebují také zobrazit... Ted se nezobrazují a použití OUTER JOIN mě vyhodí syntax error :/ Moc děkuji! |
||
Kajman Profil |
Použijte 3x
LEFT OUTER JOIN |
||
VaKvas Profil |
#5 · Zasláno: 25. 5. 2015, 12:12:04
Moc diky !!!
Mimochodem moc nechapu proc nesel jen OUTER popřípadě FULL OUTER ... Ale toto jede.. diky ! |
||
juriad_ Profil * |
#6 · Zasláno: 25. 5. 2015, 12:21:53
Protoze mysql nema plne vnejsi spojeni. Umi jen jednostranne, u ktereho je potreba davat pozor na to, zda zaznam vzdy existuje nalevo, nebo napravo.
|
||
VaKvas Profil |
#7 · Zasláno: 25. 5. 2015, 12:22:50
Aha... dekuji !
|
||
Časová prodleva: 10 let
|
0