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
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;
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
Moc diky !!!

Mimochodem moc nechapu proc nesel jen OUTER popřípadě FULL OUTER ...

Ale toto jede.. diky !
juriad_
Profil *
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
Aha... dekuji !

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