Autor Zpráva
mackopu
Profil
Zdravím,

mám následující tabulky:

pn_strediska,
pn_kraje,
pn_okresy,
pn_faktury

Potřebuji vypsat všechna střediska bez ohledu na to, zda jim už byla vystavena faktura. Toto funguje bez problémů:
SELECT pn_strediska.provozovatel, 
pn_faktury.cislo_faktury
FROM pn_strediska
LEFT JOIN pn_faktury ON (
pn_strediska.id_user = pn_faktury.id_user
)

Problém ovšem nastává, když chci u středisek zobrazit i název kraje a okresu. Toto nefunguje:
SELECT pn_strediska.provozovatel, 
pn_faktury.cislo_faktury, 
pn_kraje.nazev AS nazev_kraje, 
pn_okresy.okres AS nazev_okresu
FROM pn_strediska, pn_okresy, pn_kraje
LEFT JOIN pn_faktury ON ( pn_strediska.id_user = pn_faktury.id_user )
WHERE pn_strediska.id_okres = pn_okresy.id
AND pn_strediska.id_kraj = pn_kraje.id

Kde dělám chybu?
Mastodont
Profil
Chybu máš tady:
FROM pn_strediska, pn_okresy, pn_kraje
LEFT JOIN pn_faktury ON ( pn_strediska.id_user = pn_faktury.id_user )


Jeden JOIN může být definován jen pro dvě tabulky, chceš-li připojit další, musí to vypadat tak jako na
http://www.linuxsoft.cz/article.php?id_article=837
Tomáš K.
Profil *
Chybu nevidim ( což samozřejmě neznamená, že tam není :) ), jediné, co mě napadá, že by v tabulkách nebyl zadaný kraj nebo okres...
Zkusil bych ten dotaz trochu pozměnit:

SELECT pn_strediska.provozovatel, 
pn_faktury.cislo_faktury, 
pn_kraje.nazev AS nazev_kraje, 
pn_okresy.okres AS nazev_okresu
FROM pn_strediska
LEFT JOIN pn_faktury USING(id_user)
LEFT JOIN pn_okresy ON pn_strediska.id_okres = pn_okresy.id
LEFT JOIN pn_kraje ON pn_strediska.id_kraj = pn_kraje.id


Měl by provádět skoro totéž, jen tam budou i střediska, ke kterým není kraj nebo okres.
mackopu
Profil
Tak jsem se proklikal až na Odkaz, kde kdosi uvádí, že je třeba tabulky za FROM obalit závorkami (!!!). Zajímavé...
Funguje to, takže:
SELECT pn_strediska.provozovatel, 
pn_faktury.cislo_faktury, 
pn_kraje.nazev AS nazev_kraje, 
pn_okresy.okres AS nazev_okresu
FROM (pn_strediska, pn_okresy, pn_kraje)
LEFT JOIN pn_faktury ON ( pn_strediska.id_user = pn_faktury.id_user )
WHERE pn_strediska.id_okres = pn_okresy.id
AND pn_strediska.id_kraj = pn_kraje.id

Snad to někomu pomůže, o těch závorkách jsem se nedočetl ani v manuálu.

Tomáš K. - Tohle funguje taky :-)
Toto téma je uzamčeno. Odpověď nelze zaslat.