Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD12] code SQL de requête pour MySQL

5 réponses
Avatar
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

5 réponses

Avatar
Firetox
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" a écrit dans le message de news:
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




Avatar
Firetox
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" a écrit dans le message de news:
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




Avatar
JeAn-PhI
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
Avatar
Firetox
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" a écrit dans le message de news:
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" a écrit dans le message de news:
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








Avatar
Firetox
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" a écrit dans le message de news:
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