ďťż
 
Laickie outer join ďťż
 
Laickie outer join
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • shanti.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com