[WD12] code SQL de requête pour MySQL

Le
JeAn-PhI
bonjour

j'ai 3 tables comme suit :

Ta(0,1) -> (1,1)Tb(0,1) -> (1,1)Tc

je voudrais récupérer tous les enreg de Ta qui ont ou qui n'ont pas
d'enreg dans Tb et les enreg de Tc qui ont un enreg dans Tb.

le résultat me donnerait qq ch comme cela

Ta Tb Tc
1) Id NULL NULL
2) Id Id NULL
3) Id Id Id

je sais comment faire la 1ère partie de ma req

select Ta.*, Tb.Id
from Ta left outer join Tb on Ta.id = Tb.id

mais je ne sais pas comment faire la suite, un peu d'aide serait
bienvenue

merci

--
Cordialement JeAn-PhI
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Firetox
Le #17890441
Bonjour,

par une union

select max(IDA),max(IDB),max(IDC)

From (
Select ta.id as IDA , tab.id as IDB,'' as idC
from ta left join tb on (ta.id=tb.id .......... plus ce que tu veux)

union

Select '' as IDA , tab.id as IDB,'' as idC
from tc left join tb on (tc.id=tb.id .......... plus ce que tu veux)
) as tmp

group by IDB

les union vont remonter ceci :

1 ere union

IDA IDB IDC
1) Id NULL NULL
2) Id Id NULL
3) Id Id NUL

la deuxieme
3) NULL Id Id

l'union des deux :

IDA IDB IDC
1) Id NULL NULL
2) Id Id NULL
3) Id Id NUL
4) NULL Id Id

la sous requete englobant tout te remontera :



"JeAn-PhI" 4923d558$0$987$
bonjour

j'ai 3 tables comme suit :

Ta(0,1) -> (1,1)Tb(0,1) -> (1,1)Tc

je voudrais récupérer tous les enreg de Ta qui ont ou qui n'ont pas
d'enreg dans Tb et les enreg de Tc qui ont un enreg dans Tb.

le résultat me donnerait qq ch comme cela

Ta Tb Tc
1) Id NULL NULL
2) Id Id NULL
3) Id Id Id

je sais comment faire la 1ère partie de ma req

select Ta.*, Tb.Id
from Ta left outer join Tb on Ta.id = Tb.id

mais je ne sais pas comment faire la suite, un peu d'aide serait bienvenue

merci

--
Cordialement JeAn-PhI




Firetox
Le #17890431
Bonjour,

par une union + une sous requete

SELECT max(IDA),max(IDB),max(IDC)
from (

select ta.ID as IDA, tb.id as IDB, '' as IDC
from ta
left join tb on (ta.id = tb.Id ...... plus ce que tu veux)

union

select '' as IDA, tb.id as IDB, tc.ID as IDC
from tc
left join tb on (tc.id = tb.Id ...... plus ce que tu veux)

)

group by IDB

la premiere union va remonter ceci

IDA IDB IDC
1) Id NULL NULL
2) Id Id NULL
3) Id Id NUL

la deusieme ceci

IDA IDB IDC
4) NULL Id Id

l'union des deux

IDA IDB IDC
1) Id NULL NULL
2) Id Id NULL
3) Id Id NUL
4) NULL Id Id

la sous requete (ou le select du haut) ceci :

IDA IDB IDC
1) Id NULL NULL
2) Id Id NULL
3) Id Id id

le max servant a eliminer les NULL quand 2 lignes sont presentes (null ou ID
dans tous les cas)


Bon dev
@+

"JeAn-PhI" 4923d558$0$987$
bonjour

j'ai 3 tables comme suit :

Ta(0,1) -> (1,1)Tb(0,1) -> (1,1)Tc

je voudrais récupérer tous les enreg de Ta qui ont ou qui n'ont pas
d'enreg dans Tb et les enreg de Tc qui ont un enreg dans Tb.

le résultat me donnerait qq ch comme cela

Ta Tb Tc
1) Id NULL NULL
2) Id Id NULL
3) Id Id Id

je sais comment faire la 1ère partie de ma req

select Ta.*, Tb.Id
from Ta left outer join Tb on Ta.id = Tb.id

mais je ne sais pas comment faire la suite, un peu d'aide serait bienvenue

merci

--
Cordialement JeAn-PhI




JeAn-PhI
Le #17890421
Il se trouve que Firetox a formulé :
Bonjour,

par une union + une sous requete

SELECT max(IDA),max(IDB),max(IDC)
from (

select ta.ID as IDA, tb.id as IDB, '' as IDC
from ta
left join tb on (ta.id = tb.Id ...... plus ce que tu veux)

union

select '' as IDA, tb.id as IDB, tc.ID as IDC
from tc
left join tb on (tc.id = tb.Id ...... plus ce que tu veux)

)

group by IDB

la premiere union va remonter ceci

IDA IDB IDC
1) Id NULL NULL
2) Id Id NULL
3) Id Id NUL

la deusieme ceci

IDA IDB IDC
4) NULL Id Id

l'union des deux

IDA IDB IDC
1) Id NULL NULL
2) Id Id NULL
3) Id Id NUL
4) NULL Id Id

la sous requete (ou le select du haut) ceci :

IDA IDB IDC
1) Id NULL NULL
2) Id Id NULL
3) Id Id id

le max servant a eliminer les NULL quand 2 lignes sont presentes (null ou ID
dans tous les cas)


Bon dev
@+




pourquoi faire tc left outer join tb au lieu de tb left outer join tc ?

c'est quoi la différence entre NULL et NUL à moins que ce soit une
faute de frappe ;-)

--
Cordialement JeAn-PhI
Firetox
Le #17890411
faudra peut etre rajouter un alias sur la sous requete :

SELECT max(IDA) idta ,max(IDB) as idtb ,max(IDC) idtc
from (

select ta.ID as IDA, tb.id as IDB, '' as IDC
from ta
left join tb on (ta.id = tb.Id ...... plus ce que tu veux)

union

select '' as IDA, tb.id as IDB, tc.ID as IDC
from tc
left join tb on (tc.id = tb.Id ...... plus ce que tu veux)

) as TMPREQ

// la tu peux rajouter un where pour avoir ceux qui sont uniquement en ta et
tc (la ligne 3 par exemple)
// WHERE idtaq is not null and idtc is not null

group by TMPREQ.idtb



"Firetox" 4923d99c$0$15991$
Bonjour,

par une union + une sous requete

SELECT max(IDA),max(IDB),max(IDC)
from (

select ta.ID as IDA, tb.id as IDB, '' as IDC
from ta
left join tb on (ta.id = tb.Id ...... plus ce que tu veux)

union

select '' as IDA, tb.id as IDB, tc.ID as IDC
from tc
left join tb on (tc.id = tb.Id ...... plus ce que tu veux)

)

group by IDB

la premiere union va remonter ceci

IDA IDB IDC
1) Id NULL NULL
2) Id Id NULL
3) Id Id NUL

la deusieme ceci

IDA IDB IDC
4) NULL Id Id

l'union des deux

IDA IDB IDC
1) Id NULL NULL
2) Id Id NULL
3) Id Id NUL
4) NULL Id Id

la sous requete (ou le select du haut) ceci :

IDA IDB IDC
1) Id NULL NULL
2) Id Id NULL
3) Id Id id

le max servant a eliminer les NULL quand 2 lignes sont presentes (null ou
ID dans tous les cas)


Bon dev
@+

"JeAn-PhI" 4923d558$0$987$
bonjour

j'ai 3 tables comme suit :

Ta(0,1) -> (1,1)Tb(0,1) -> (1,1)Tc

je voudrais récupérer tous les enreg de Ta qui ont ou qui n'ont pas
d'enreg dans Tb et les enreg de Tc qui ont un enreg dans Tb.

le résultat me donnerait qq ch comme cela

Ta Tb Tc
1) Id NULL NULL
2) Id Id NULL
3) Id Id Id

je sais comment faire la 1ère partie de ma req

select Ta.*, Tb.Id
from Ta left outer join Tb on Ta.id = Tb.id

mais je ne sais pas comment faire la suite, un peu d'aide serait
bienvenue

merci

--
Cordialement JeAn-PhI








Firetox
Le #17890401
c'est une faute de frappe pour le NUL

pour le left join tout depend
si tu veux toute les ligne tb qui ont ou non une liaison sur tc
ou si tu veux tous les tc qui ont ou non une liaison dans tb

le select sera tb left join tc dans le premier cas et tc left join tb dans
le deuxieme
j'ai peut etre fait une connerie et tu as raison cela aurait du etre tb left
join tc



"JeAn-PhI" 4923dbfc$0$2260$
Il se trouve que Firetox a formulé :
Bonjour,

par une union + une sous requete

SELECT max(IDA),max(IDB),max(IDC)
from (

select ta.ID as IDA, tb.id as IDB, '' as IDC
from ta
left join tb on (ta.id = tb.Id ...... plus ce que tu veux)

union

select '' as IDA, tb.id as IDB, tc.ID as IDC
from tc
left join tb on (tc.id = tb.Id ...... plus ce que tu veux)

)

group by IDB

la premiere union va remonter ceci

IDA IDB IDC
1) Id NULL NULL
2) Id Id NULL
3) Id Id NUL

la deusieme ceci

IDA IDB IDC
4) NULL Id Id

l'union des deux

IDA IDB IDC
1) Id NULL NULL
2) Id Id NULL
3) Id Id NUL
4) NULL Id Id

la sous requete (ou le select du haut) ceci :

IDA IDB IDC
1) Id NULL NULL
2) Id Id NULL
3) Id Id id

le max servant a eliminer les NULL quand 2 lignes sont presentes (null ou
ID dans tous les cas)


Bon dev
@+




pourquoi faire tc left outer join tb au lieu de tb left outer join tc ?

c'est quoi la différence entre NULL et NUL à moins que ce soit une faute
de frappe ;-)

--
Cordialement JeAn-PhI




Publicité
Poster une réponse
Anonyme