Laickie outer join
Doker - 09-07-2007 00:02
Laickie outer join
Ponizej jest zapytanie sql (mssql 2005), ktore wybiera slowa kluczowe (kazde ma pole jezyka ) i laczy to z tabela jezykow. Jesli nie ma slowa w danym jezyku to obok jezyka powinny byc pola null, dlatego tez zrobilem najpierw right outer join, a pozniej to juz nawet full outer join. Ale i tak mimo, ze mam w tym momencie dwa jezyki i jedno pole slowa_kluczowego w bazie, wyrzuca mi zaledwie jeden rekord. A gdzie drugi?
SELECT slowa_kluczowe_obrazka_w_jezyku.id_jezyka, slowa_kluczowe_obrazka_w_jezyku.nazwa, slowa_kluczowe_obrazka_w_jezyku.id, jezyki.id FROM slowa_kluczowe_obrazka_w_jezyku FULL OUTER JOIN jezyki ON slowa_kluczowe_obrazka_w_jezyku.id_jezyka = jezyki.id WHERE (slowa_kluczowe_obrazka_w_jezyku.id_slowa_kluczowe go_obrazka = @id_slowa_kluczowego_obrazka) ORDER BY jezyki.nazwa
Pytanie, co robie nie tak?
PS. @id_slowa_kluczowego_obrazka oznacza zmienna (bo kazdemu slowu kluczowemu odpowiada kilka slow kluczowych w jezyku. Teraz zawsze wpisuje =2).
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 09-07-2007 00:02
Doker wrote: > Jesli nie ma slowa w danym jezyku to obok jezyka powinny byc pola null,
> WHERE (slowa_kluczowe_obrazka_w_jezyku.id_slowa_kluczowe go_obrazka = > @id_slowa_kluczowego_obrazka)
> PS. @id_slowa_kluczowego_obrazka oznacza zmienna (bo kazdemu slowu > kluczowemu odpowiada kilka slow kluczowych w jezyku. Teraz zawsze > wpisuje =2).
Baza robi to co jej karzesz!
-- P.M.
TW - 09-07-2007 00:02
On 8 Lip, 13:26, Doker <dok...@wp.pl> wrote: > Ponizej jest zapytanie sql (mssql 2005), ktore wybiera slowa kluczowe > (kazde ma pole jezyka ) i laczy to z tabela jezykow. > Jesli nie ma slowa w danym jezyku to obok jezyka powinny byc pola null, > dlatego tez zrobilem najpierw right outer join, a pozniej to juz nawet > full outer join. Ale i tak mimo, ze mam w tym momencie dwa jezyki i > jedno pole slowa_kluczowego w bazie, wyrzuca mi zaledwie jeden rekord. A > gdzie drugi? > > SELECT slowa_kluczowe_obrazka_w_jezyku.id_jezyka, > slowa_kluczowe_obrazka_w_jezyku.nazwa, > slowa_kluczowe_obrazka_w_jezyku.id, jezyki.id > FROM slowa_kluczowe_obrazka_w_jezyku > FULL OUTER JOIN jezyki > ON slowa_kluczowe_obrazka_w_jezyku.id_jezyka = jezyki.id > WHERE (slowa_kluczowe_obrazka_w_jezyku.id_slowa_kluczowe go_obrazka = > @id_slowa_kluczowego_obrazka) > ORDER BY jezyki.nazwa > > Pytanie, co robie nie tak? > > PS. @id_slowa_kluczowego_obrazka oznacza zmienna (bo kazdemu slowu > kluczowemu odpowiada kilka slow kluczowych w jezyku. Teraz zawsze > wpisuje =2).
Powró do right joina, i warunek z where'a umie w klauzuli ON.
TW - 10-07-2007 00:00
On 8 Lip, 18:41, Doker <dok...@wp.pl> wrote: > Doker napisa (a):>> Powró do right joina, i warunek z where'a umie wklauzuli ON. > > wywalilem zupelnie warunek where i to samo. > > Diagram tabel wyglada nastepujaco:http://dotnet.uni.lodz.pl/doker/stuff/diagram1.png > Co bedzie w where nie ma znaczenia. > Znaczenie ma fakt, ze jest w ogole tylko jedno pole w tabeli slow w > jezyku, a dwa pola w tabeli jezykow. > Mimo to dostaje jeden rekord wyniku.
Where jak najbardziej ma kluczowe znaczenie przy outer join'ach - przecie dzia a na wyniku z czenia, i daj c slowa_kluczowe_obrazka_w_jezyku.id_slowa_kluczoweg o_obrazka = @id_slowa_kluczowego_obrazka wykluczasz wiersze z null'ami w tym polu. Polecam te wkleja skrypty DDL, nikomu si nie chce przeklepywa . Analogicznie do twojej sytuacji:
create table a (id int, b_id int, a_opis varchar(10)) create table b (id int, b_opis varchar(10)) insert into b values (1,'b1') insert into b values (2,'b2') insert into a values (1,1,'a1 do b1')
select a.*, b.* from a full outer join b on a.b_id=b.id and a.id=1
Wynik: id b_id a_opis id b_opis 1 1 a1 do b1 1 b1 NULL NULL NULL 2 b2
(2 row(s) affected)
eby mie ten sam efekt z where musia by dodac co nieco: select a.*, b.* from a full outer join b on a.b_id=b.id where a.id=1 or a.id is null
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MySQL] Wybierz tylko te rekordy z t1 =?ISO-8859-2?Q?kt=F3rych_?==?ISO-8859-2?Q?nie_ma_w_t2=2E_JOIN_=3F?=
=?iso-8859-2?Q?Problem_z_left_join_-_=B3=B1czenie_kilku_tabel.?=
=?iso-8859-2?q?SQL:_left_join:_dublowanie_wynik=F3w?=
mysql: left join group by order by - problem z sortowaniem
[mysql, postgres] poprawne uzycie GROUP BY i JOIN
[MySQL] wiele tabel w left join
[MySQL] LEFT JOIN - strasznie wolny
[MySql] pytanie o relacje, JOIN
Zapytanie na 3 tabele, JOIN itp.
dziwna sprawa z join w mysql 5.0
zanotowane.pldoc.pisz.plpdf.pisz.plshanti.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 |
|