[MySQL] wiele tabel w left join
R - 13-03-2006 11:23
[MySQL] wiele tabel w left join
Witam grupowiczow.
Mam taka sytuacje, jest tabela z ofertami, ktora ma m.in. takie pola:
id_wojewodztwa, id_powiatu, id_gminy, id_dzielnicy
odwoluja sie one do tablic odpowiednio wojewodztwa, powiaty, gminy, dzielnice
pola id_gminy i id_dzielnicy moga byc NULL id_wojewodztwa, id_powiatu sa NOT NULL i zawsze musza byc podane
mam takie zapytanie aby pobrac wszystkie dane z ofert + nazwy jednostek administracyjnych:
SELECT `o`.*, `w`.`nazwa` as `wojewodztwo`, `p`.`nazwa` as `powiat`, `g`.`nazwa` as `gmina`, `d`.`nazwa` as `dzielnica` FROM `oferty` as `o` LEFT JOIN (`wojewodztwa` as `w`, `powiaty` as `p`, `gminy` as `g`, `dzielnice` as `d`) ON (`w`.`id_wojewodztwa` = `o`.`id_wojewodztwa` AND `p`.`id_powiatu` = `o`.`id_powiatu` AND `g`.`id_gminy` = `o`.`id_gminy` AND `d`.`id_dzielnicy` = `o`.`id_dzielnicy` )
jesli dodam rekord, ktory ma wojewodztwo, powiat, gmine (miejska) i dzielnice moje zapytanie dziala OK
ale np. jest powiat grocki, ktory nie ma zadnej gminy - ma tylko dzielnice wtedy id_gminy w ofertach jest NULL, jest sobie powiat XYZ, ktory ma tylko gminy, wowczas id_dzielnicy jest NULL
wtedy SELECT na left joinie zwraca NULL dla wszystich left joinow takze tych NOT NULL: wojewodztwa (jest id), powiatu (jest id) i w zaleznosci od powiatu grockiego/ziemskiego: gminy/powiatu
jak napisac poprawnego left joina abym mogl pobrac wszystkie oferty, plus tyle informacji o jednostkach administracyjnych ile moge?
z gory dzieki za pomoc pzdr R
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
keczerad - 13-03-2006 11:23
>ON > (`w`.`id_wojewodztwa` = `o`.`id_wojewodztwa` > AND `p`.`id_powiatu` = `o`.`id_powiatu` > AND `g`.`id_gminy` = `o`.`id_gminy` > AND `d`.`id_dzielnicy` = `o`.`id_dzielnicy` > )
wiesz jak dziala AND ? to jest klucz do twojej dolegliwosci
-- keczerad
www.e-mo.com.pl
R - 13-03-2006 11:23
keczerad <keczerad@poczta.fm> napisał(a):
> >ON > > (`w`.`id_wojewodztwa` = `o`.`id_wojewodztwa` > > AND `p`.`id_powiatu` = `o`.`id_powiatu` > > AND `g`.`id_gminy` = `o`.`id_gminy` > > AND `d`.`id_dzielnicy` = `o`.`id_dzielnicy` > > ) > > wiesz jak dziala AND ? to jest klucz do twojej dolegliwosci
wlasnie po to uzywam LEFT JOINa...
jak wtedy zaznaczyc, ze id_powiatu ma byc rowne id_powiatu z tabeli o aliasie p?
prosze o podpowiedz
z gory dzieki pzdr R
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
R - 13-03-2006 11:24
OK, moze komus sie kiedys przyda, rozwiazanie jest takie: trzeba rozpisac wszystkie zlaczenia osobno:
LEFT JOIN `wojewodztwa` as `w` ON `w`.`id_wojewodztwa` = `o`.`id_wojewodztwa` LEFT JOIN `powiaty` as `p` ON `p`.`id_powiatu` = `o`.`id_powiatu` LEFT JOIN `gminy` as `g` ON `g`.`id_gminy` = `o`.`id_gminy` LEFT JOIN `dzielnice` as `d` ON `d`.`id_dzielnicy` = `o`.`id_dzielnicy`
i dziala jak nalezy
pzdr R
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 13-03-2006 11:24
R wrote: > Witam grupowiczow. > > Mam taka sytuacje, jest tabela z ofertami, ktora ma m.in. takie pola: > > id_wojewodztwa, id_powiatu, id_gminy, id_dzielnicy > > odwoluja sie one do tablic odpowiednio wojewodztwa, powiaty, gminy, dzielnice > > pola id_gminy i id_dzielnicy moga byc NULL > id_wojewodztwa, id_powiatu sa NOT NULL i zawsze musza byc podane > > mam takie zapytanie aby pobrac wszystkie dane z ofert + nazwy jednostek > administracyjnych: > > SELECT > `o`.*, `w`.`nazwa` as `wojewodztwo`, `p`.`nazwa` as `powiat`, > `g`.`nazwa` as `gmina`, `d`.`nazwa` as `dzielnica` > FROM > `oferty` as `o` > LEFT JOIN > (`wojewodztwa` as `w`, `powiaty` as `p`, `gminy` as `g`, `dzielnice` as `d`) > ON > (`w`.`id_wojewodztwa` = `o`.`id_wojewodztwa` > AND `p`.`id_powiatu` = `o`.`id_powiatu` > AND `g`.`id_gminy` = `o`.`id_gminy` > AND `d`.`id_dzielnicy` = `o`.`id_dzielnicy` > )
',' to synonim zwykłego joina, czego łatwo się domyslić po wynikach działania tego selekta. Musisz pracowicie left join'ować każdą tabele osobno.
-- P.M.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?=
[MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?=
[mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?=
[MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?=
[MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?=
Gdzie MySQL 4.1, a gdzie 5.0?
[MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?=
[MS SQL] "set names" (mySQL) w MS SQL
[mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
MySQL - jak =?ISO-8859-2?Q?wyeksportowa=E6_zawarto=B6=E6_wie?==?ISO-8859-2?Q?lkiej_tabeli?=
zanotowane.pldoc.pisz.plpdf.pisz.plchinska-zupka.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|