ďťż
 
JOIN i trzy tabelki ďťż
 
JOIN i trzy tabelki
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

JOIN i trzy tabelki



ykk - 14-05-2006 00:47
JOIN i trzy tabelki
  Witam,

Proszę o wskazanie wydajniejszego rozwiązania poniższego problemu
Mam trzy tabel A, B,C mające jakies wspólne pola dajmy na to id.

Potrzebuję aby wynik zapytania zwrócił wszystkie rekordy z A dla których nie
istnieją odpowiednie id w tabeli B "A.id != B.id"
oraz do wszystkiego co zostało dodał rekordy z C jeśłi istnieją (jeśli nie
to puste dane)

jak na razie tylko coś takiego przychodzi mi do głowy:

Select A.id, B.id, C.id from
A left join B on (A.id =B.id) left join C on (A.id=C.id)
where B.id is null

jeszcze nie miałem okazji przetestować tego i nie wiem czy to rozwiąże mój
poblem - ale może istneje jakieś lepsze rozwiązanie

--
Pozdrawiam
Karol Kostanek
www.karol.boo.pl
~~~~~~~~~~~
~~~~_/)~~~~
~~~~~~~~~~~





ykk - 14-05-2006 00:48

 
> Proszę o wskazanie wydajniejszego rozwiązania poniższego problemu
> Mam trzy tabel A, B,C mające jakies wspólne pola dajmy na to id.
>
> Potrzebuję aby wynik zapytania zwrócił wszystkie rekordy z A dla których
> nie istnieją odpowiednie id w tabeli B "A.id != B.id"
> oraz do wszystkiego co zostało dodał rekordy z C jeśłi istnieją (jeśli nie
> to puste dane)
>
> jak na razie tylko coś takiego przychodzi mi do głowy:
>
> Select A.id, B.id, C.id from
> A left join B on (A.id =B.id) left join C on (A.id=C.id)
> where B.id is null
>
> jeszcze nie miałem okazji przetestować tego i nie wiem czy to rozwiąże mój
> poblem - ale może istneje jakieś lepsze rozwiązanie
>
>

Właśnie przetestowałem i nie dizał tak jakbym chciał ...
dodam że urumamiane jest w PHP przez ODBC - może to tu jest problem ????

--
Pozdrawiam
Karol Kostanek
www.karol.boo.pl
~~~~~~~~~~~
~~~~_/)~~~~
~~~~~~~~~~~




ThomasO@cpas.com - 14-05-2006 00:48

  Karol,
select ,A.id from A
MINUS
select B.id from B
UNION
select C.id from C




ykk - 14-05-2006 00:48

 
> select ,A.id from A
> MINUS
> select B.id from B
> UNION
> select C.id from C

Dzieki,

W poprzednim poscie chyba za bardzo to uproscilem - i nie bardzo wiem jak to
przerobic na MINUS i UNION:

select A.dane1, A.id, A.dane2, C.dane3, A.dane4, A.dane5
from TABELA1 A left join TABELA2 B on (A.id = B.id and A.id2 = B.id2) left
join TABELA3 C on (A.id3 = C.id3)
where A.dane0 != 'D' and B.dane0 != 'D' and C.dane0 != 'D' and A.dane1 =
'jakas wartosc'

ale niestety w wyniku sa tylko te wiersze z A w których A.id = B.id - nie sa
dorzucane te wiersze dla których nie ma odpowiednika id w B i dodatkowo sa
kilkatrotnie zdublowane
niestety zakres potrzebnych danych z A jest szerszy niz samo id - i
dodatkowo jest kilka warunków ....

--
Pozdrawiam
Karol Kostanek
www.karol.boo.pl
~~~~~~~~~~~
~~~~_/)~~~~
~~~~~~~~~~~





ThomasO@cpas.com - 14-05-2006 00:48

  Karol,
Jaka baza danych?
SQL roznia sie zaleznie od bazy.
Thomas




mhm - 14-05-2006 00:48

  ykk napisał(a):
> Witam,
>
> Proszę o wskazanie wydajniejszego rozwiązania poniższego problemu
> Mam trzy tabel A, B,C mające jakies wspólne pola dajmy na to id.
>
> Potrzebuję aby wynik zapytania zwrócił wszystkie rekordy z A dla których nie
> istnieją odpowiednie id w tabeli B "A.id != B.id"
> oraz do wszystkiego co zostało dodał rekordy z C jeśłi istnieją (jeśli nie
> to puste dane)
>
> jak na razie tylko coś takiego przychodzi mi do głowy:
>
> Select A.id, B.id, C.id from
> A left join B on (A.id =B.id) left join C on (A.id=C.id)
> where B.id is null
>
> jeszcze nie miałem okazji przetestować tego i nie wiem czy to rozwiąże mój
> poblem - ale może istneje jakieś lepsze rozwiązanie
>
>
>

select
A.id, C.id
from
A left join C on (A.id = C.id)

except

select
B.id, C.id
from
B left join C on (B.id = C.id);

--
mhm.




mhm - 14-05-2006 00:48

  mhm napisał(a):
> ykk napisał(a):
>
>> Witam,
>>
>> Proszę o wskazanie wydajniejszego rozwiązania poniższego problemu
>> Mam trzy tabel A, B,C mające jakies wspólne pola dajmy na to id.
>>
>> Potrzebuję aby wynik zapytania zwrócił wszystkie rekordy z A dla
>> których nie istnieją odpowiednie id w tabeli B "A.id != B.id"
>> oraz do wszystkiego co zostało dodał rekordy z C jeśłi istnieją (jeśli
>> nie to puste dane)
>>
>> jak na razie tylko coś takiego przychodzi mi do głowy:
>>
>> Select A.id, B.id, C.id from
>> A left join B on (A.id =B.id) left join C on (A.id=C.id)
>> where B.id is null
>>
>> jeszcze nie miałem okazji przetestować tego i nie wiem czy to rozwiąże
>> mój poblem - ale może istneje jakieś lepsze rozwiązanie
>>
>>
>>
>
> select
> A.id, C.id
> from
> A left join C on (A.id = C.id)
>
> except
>
> select
> B.id, C.id
> from
> B left join C on (B.id = C.id);
>

nie doczytałam. zamiast left join wstaw left outer join.

--
mhm.




ykk - 16-05-2006 00:15

 
> Jaka baza danych?
> SQL roznia sie zaleznie od bazy.

DB2

--
Pozdrawiam
Karol Kostanek
www.karol.boo.pl
~~~~~~~~~~~
~~~~_/)~~~~
~~~~~~~~~~~




Artur - 16-05-2006 00:15

  Da się to zrobić też tak:

select t.id, t.c2, t.c3, c.t2
(select id,c2,c3 from A except select id,c2,c3 from B) as t
left outer join C on
t.id = c.id

czyli to co jest w nawiasach traktowane jest jak tabela, do której
odwołujesz się przez nazwę t i dalej robisz dowolne złączenie.

Jeśli chcesz pocztać więcej o możliwych konstrukcjach w DB2 polecam
damową książkę, DB2 SQL Cook Book:

http://mysite.verizon.net/Graeme_Birchall/id1.html

-- Artur Wronski
  • 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. LEFT OUTER JOIN v. UNION
  • 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