Temat: Join'owanie z warunkiem?
Witam wszystkich,mam pytanie czy jest jakaś możliwość joinowania z wykorzystaniem warunków.
Coś na zasadzie:
select * from tablica1 aa join tabllica2 on aa.kolumna1=bb.kolumna1 AND
case
when aa.kolumna1=5 then aa.kolumna2=bb.kolumna_dla5
when aa.kolumna1=6 then aa.kolumna2=bb.kolumna_dla6
wiem, że 'gramatycznie' Oracle tego nie przyjmuje ale czy jest coś co poradzi sobie z taką logiką?
W PRZYKŁADZIE:
create table tablica1
( ID integer,
numer integer,
wartosc integer,
kod integer)
create table tablica2
( ID integer,
numer_dla5 integer,
numer_dla6 integer,
lokalizacja integer,
lokalizacja2 integer)
insert into tablica1 values(5,101,1000,1);
insert into tablica1 values(5,102,5000,2);
insert into tablica1 values(6,101,2000,3);
insert into tablica1 values(6,102,1000,4);
insert into tablica2 values(5,101,216,1,13);
insert into tablica2 values(5,102,217,1,14);
insert into tablica2 values(6,365,101,1,15);
insert into tablica2 values(6,155,102,1,16);
select * from tablica1;
/*************************
id numer wartosc kod
5 101 1000 1
5 102 5000 2
6 101 2000 3
6 102 1000 4
*************************/
select * from tablica2;
/*************************
id numer_dla5 numer_dla6 lokalizacja1 lokalizacja2
5 101 216 1 13
5 102 217 1 14
6 365 101 1 15
6 155 102 1 16
*************************/
select aa.*,bb.* from tablica1 aa join tablica2 bb on aa.id=bb.id;
--otrzymam duplikaty
select aa.*,bb.* from tablica1 aa join tablica2 bb on aa.id=bb.id and aa.numer=bb.numer_dla5;
--otrzymam dane tylko dla id=5
select aa.*,bb.* from tablica1 aa left join tablica2 bb on aa.id=bb.id and aa.numer=bb.numer_dla5;
--otrzymam dane tylko dla id=5 plus puste wiersze
select aa.*,bb.* from tablica1 aa join tablica2 bb on aa.id=bb.id and aa.numer=bb.numer_dla6;
--otrzymam dane tylko dla id=6
select aa.*,bb.* from tablica1 aa join tablica2 bb on aa.id=bb.id and aa.numer=bb.numer_dla6;
--otrzymam dane tylko dla id=6 plus puste wiersze
TUTAJ POJAWIA SIĘ MOJE PYTANIE CZY MOGĘ JAKOŚ ZROBIĆ JOINA KTÓRY SIĘ Z TYM UPORA???
COŚ NA WZÓR
select * from tablica1 aa join tabllica2 on aa.ID=bb.ID AND
case
when aa.ID=5 then aa.NUMER=bb.NUMER_DLA5
when aa.ID=6 then aa.NUMER=bb.NUMER_DLA6
Poradzilem sobie w inny sposób, dzięki któremu otrzymam wyniki jakie oczekuje. Zastanawia mnie jednak czy jest coś co pozwoli się z tym uporać trakcie jedngo join'a.
--mój sposób + wynik:
select aa.*,bb.* from tablica1 aa join tablica2 bb on aa.id=bb.id and aa.numer=bb.numer_dla5 where aa.id=5
union
select aa.*,bb.* from tablica1 aa join tablica2 bb on aa.id=bb.id and aa.numer=bb.numer_dla6 where aa.id=6;
/**************************************************************************************************
KOD NUMER wartosc id id_1 numer_dla5 numer_dla6 lok lok2
1 101 1000 5 5 101 216 1 13
2 102 5000 5 5 102 217 1 14
3 101 2000 6 6 365 101 1 15
4 102 1000 6 6 155 102 1 16
**************************************************************************************************/
Jeżeli nie da się tego zrobić, również proszę o odpowiedź. A może można to zrobić inaczej?
Pozdrawiam i z góry dziękuję za pomoc.
Łukasz