Šta je novo?

sql, join problem

  • Začetnik teme Začetnik teme miha
  • Datum pokretanja Datum pokretanja

miha

Čuven
Učlanjen(a)
12.01.2002
Poruke
786
Poena
620
tabelaA: cola1, cola2, cola3, cola4
tabelaB: colb1, colb2
tabelaC: colc1, colc2

Hocu da u kao rezulat dobijem: cola1, cola2, colb2, colc2, gde su naravno tabelaA i tabelaB povezane preko cola3=colb1 i tabelaA i tabelaC cola4=colc1. Hocu da prikazem sve rekorde iz tabelaA iako po neki podatak fali u tabelaB ili u tabelaC.
Znaci treba mi outer join. E sada kada ja koristim left join dva puta, dobijem dekartov proizvod 🙁

Znaci ovo radi:
Kod:
select * from tabelaA
left join tabelaB
  on tabelaA.cola3 = tabelaB.colb1;
ali ovo ne radi (tj. radi ali dobijem Dekartov proizvod tj. cross-join):
Kod:
select * from tabelaA
left join tabelaB
  on tabelaA.cola3 = tabelaB.colb1
left join tabelaC
  on tabelaA.cola4 = tabelaC.colc1;

Nesto propustam... :wall:
 
Poslednja izmena:
Kod:
select tabelaA.cola1, tabelaA.cola2, tabelaB.colb2, tabelaC.colc2 from tabelaA, tabelaB, tabelaC where tabelaA.cola3=tabelaB.colb1 and tabelaA.cola4=tabelaC.colc1;

Ovo bi trebalo da bude to. Pisao sam tabelaA, tabelaB, tabelaC ispred imena svake kolone jer ne znam da li se poklapaju imena kolona u tabelama. Ti ne moras, ako svaka kolona ima razlicito ime ili je ime neke kolone jedinstveno za sve 3 tabele. Prosto receno, ako nema ponvljanja imena 🙂
 
@kraft
To je INNER JOIN a treba mu LEFT OUTER JOIN.

Kod:
select * from tabelaA
left join tabelaB
  on tabelaA.cola3 = tabelaB.colb1
left join tabelaC
  on tabelaA.cola4 = tabelaC.colc1;

Nesto propustam... :wall:
Trebalo bi da radi tako. Jel mozes da vidis execution plan? Tu bi verovatno video gde je problem.
 
Poslednja izmena:
Onda moras ovako

Kod:
select * from ((tabelaA left join tabelaB on tabelaA.cola3 = tabelaB.colb1) left join tabelaC on tabelaA.cola4 = tabelaC.colc1);

Meni radi, valjda ce i tebi.

Takodje mi radi prvi upit koji sam ti napisao, rezultat je skoro identican, samo sto ima malih razlika u redosledu, ali to sve mozes da regulises sa order ako je redosled bitan.

Pozdrav.
 
Poslednja izmena:
Nazad
Vrh Dno