plusieur outer join, c'est possible????

plusieur outer join, c'est possible???? - SQL/NoSQL - Programmation

Marsh Posté le 10-07-2003 à 10:19:50    

Salut Salut  :hello:  
 
voila ma requete :  
"SELECT agent.num_agent,nom_agent, prenom_agent, telephone,num_tel  from agent  left outer JOIN portable ON agent.num_agent = portable.num_agent"
 
ca marche mais si je veux ajouter d'autre outer join je fais comment?

Reply

Marsh Posté le 10-07-2003 à 10:19:50   

Reply

Marsh Posté le 10-07-2003 à 10:24:48    

bin tu les rajoutes a la fin ... mais la je sens que ça t'aide pas  :)  

Code :
  1. SELECT
  2.   agent.num_agent,
  3.   nom_agent,
  4.   prenom_agent,
  5.   telephone,
  6.   num_tel 
  7. from
  8.   agent left outer JOIN
  9.   portable ON ( agent.num_agent = portable.num_agent ) left outer join
  10.   blabla ON ( ... )
  11.   ....


Reply

Marsh Posté le 10-07-2003 à 10:30:16    

ca marche pas ca :
 
"SELECT agent.num_agent,nom_agent, prenom_agent, telephone,num_tel  from agent  left outer JOIN portable ON (agent.num_agent = portable.num_agent)  left outer JOIN dp ON (agent.num_agent = dp.num_agent)"

Reply

Marsh Posté le 10-07-2003 à 10:54:54    

C'est encore moi  
 
En fait ce que je veux c'est joindre la table1 ,la table2 et la table3 en conservant toutes les lignes de la table 1.
Ces 3 tables sont reliées par le meme champ "num_agent"
 
voila si qqun peut m'aider je le remercie d'avance

Reply

Marsh Posté le 10-07-2003 à 11:17:38    

c'est bon j'ai trouveé comment ca marche.
Il faut simplement utilisé des parenthèsesun peu partout

Reply

Marsh Posté le 10-07-2003 à 17:21:42    

Tu peux faire autant le left outer join que tu veux, mais pas en cascade.
 
Exemple :
 

select cases.caseid, cases.sigcli, nvl(contact.clinam, ' ') clinam, detcli.nomcli clinom, nvl(cases.castit, ' ') castit, nvl(to_char(to_date(cases.callba, 'YYYYMMDD'), 'DD/MM/YYYY'), ' ') as CALLBA, cases.priori, cases.status, cases.uticre, to_char(to_date(cases.datcre, 'YYYYMMDD'), 'DD/MM/YYYY') || ' ' || cases.heucre dte, detcli.sigrep, to_date(nvl(clos.datmod, to_char(sysdate, 'YYYYMMDD')), 'YYYYMMDD') - to_date(cases.datcre, 'YYYYMMDD') age, nvl(nvl(proinf.fldlbl, '') || nvl(orders.fldlbl, '') || nvl(declin.fldlbl, ''), ' ') reason, decode(cases.proinf, null, ' ', 'Inboud call') || decode(cases.orders, null, ' ', 'Outbound call pos') || decode(cases.declin, null, ' ', 'Outbound call neg') as calltype
from tmp_crm_cases cases, tmp_crm_cases_contact contact, detcli, tmp_crm_cases clos, tmp_crm_cases_choices proinf, tmp_crm_cases_choices orders, tmp_crm_cases_choices declin
where contact.contact = cases.contact and contact.STATUS = 'VISIBLE'
and detcli.sigcli = cases.sigcli  
and clos.caseid(+) = cases.caseid and clos.status(+) = 'CLOSED'
and proinf.fldnme(+) = 'PROINF' and proinf.fldval(+) = cases.proinf
and orders.fldnme(+) = 'ORDERS' and orders.fldval(+) = cases.orders  
and declin.fldnme(+) = 'DECLIN' and declin.fldval(+) = cases.declin


 
Ca ça marche.
 
Par contre, ça ça ne marchera pas :
 

select t3.toto
from t1, t2, t3
where t1.id(+) = t2.id
and t3.id(+) = t1.id
and ...


 
Parceque dans ce cas, du fait un left join sur une table qui participe déjà à gauche d'un autre left join. On ne peut donc pas faire de left join de T3 par rapport à T1 parceque T1 est déjà à gauche d'une jointure avec T2.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed