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

Requête complexe (pour moi)

4 réponses
Avatar
JM
Bonjour.

J'ai un problème avec un "Select inner + outer + outer" que je ne parviens
pas à résoudre et me permets de solliciter votre avis.


Je veux tous les enregistrements de T1 et de T2 (T1 inner join T2) + les
enregistrements de T3 ((T1 inner join T2 Left Outer join T3) et jusque là,
ca va.

SELECT T1.Code, T2.Code, T3.code FROM T2 inner join T1 on T2.code=T1.code
LEFT outer JOIN T3 on T2.numero=T3.numero WHERE T2.numeroID = '05460'



Certains enregistrements de T3 existent aussi dans une table T4. Si c'est le
cas, je voudrais exclure de ma sélection ceux pour lesquels on a 'Oui' dans
le champ T4.TOTO . Et là, je rame grave.

En Français, ça donnerait :

Sélectionner tous les enregistrements de T1 et de T2, ajouter ceux de T3 qui
correspondent à T2, mais ne les ajouter que si :

- soit ils exsitent dans T4, et dans ce cas le champ T4.TOTO est égal à oui
- soit ils n'existent pas dans T4


Je suis preneur de tout conseil, avec mes très sincères remerciements.

4 réponses

Avatar
Christian Robert
Bonjour,

Si c'est pour exclure les enregistrement qui ne correspondent pas à un
critère dans T4, alors dans le WHERE je verrais bien :

AND EXISTS(SELECT * FROM T4 WHERE champTx = champT4 AND .....)

ou NOT EXISTS si le test est inverse.

champTx = champT4 correspond à la jointure faite entre T4 et l'une des
autres tables. Dans le SELECT laissez *.

--
Cordialement

Christian Robert
Consultant - Formateur chez Winwise
MCT - MCDBA - MCSD
MCTS & MCITP SQL Server 2005


"JM" a écrit :

Bonjour.

J'ai un problème avec un "Select inner + outer + outer" que je ne parviens
pas à résoudre et me permets de solliciter votre avis.


Je veux tous les enregistrements de T1 et de T2 (T1 inner join T2) + les
enregistrements de T3 ((T1 inner join T2 Left Outer join T3) et jusque là,
ca va.

SELECT T1.Code, T2.Code, T3.code FROM T2 inner join T1 on T2.code=T1.code
LEFT outer JOIN T3 on T2.numero=T3.numero WHERE T2.numeroID = '05460'



Certains enregistrements de T3 existent aussi dans une table T4. Si c'est le
cas, je voudrais exclure de ma sélection ceux pour lesquels on a 'Oui' dans
le champ T4.TOTO . Et là, je rame grave.

En Français, ça donnerait :

Sélectionner tous les enregistrements de T1 et de T2, ajouter ceux de T3 qui
correspondent à T2, mais ne les ajouter que si :

- soit ils exsitent dans T4, et dans ce cas le champ T4.TOTO est égal à oui
- soit ils n'existent pas dans T4


Je suis preneur de tout conseil, avec mes très sincères remerciements.






Avatar
JM
Merci Chrstian.

J'ai essayé, mais c'est pas bon, parce que ça élimine les enregistrements
(de mon select) qui n'existent pas dans T4.

C'est là la difficulté : il faut garder tous les enregistrements de T1 et T2
d'une part, ceux de T3 d'autre part, sauf, pour T3, si un enregistrement
existant dans T4 avec le même 'code' a le champ TOTO à Oui. Mais il ne faut
pas éliminer les enregistrements de T3 qui n'ont pas de correspondance dans
T4, et c'est ce qui se passe avec le EXISTS.

Merci encore d'avoir répondu. Je n'ai toujours pas trouvé...

Cordialement.



"Christian Robert" (sansspam)> a écrit dans le
message de news:
Bonjour,

Si c'est pour exclure les enregistrement qui ne correspondent pas à un
critère dans T4, alors dans le WHERE je verrais bien :

AND EXISTS(SELECT * FROM T4 WHERE champTx = champT4 AND .....)

ou NOT EXISTS si le test est inverse.

champTx = champT4 correspond à la jointure faite entre T4 et l'une des
autres tables. Dans le SELECT laissez *.

--
Cordialement

Christian Robert
Consultant - Formateur chez Winwise
MCT - MCDBA - MCSD
MCTS & MCITP SQL Server 2005


"JM" a écrit :

> Bonjour.
>
> J'ai un problème avec un "Select inner + outer + outer" que je ne


parviens
> pas à résoudre et me permets de solliciter votre avis.
>
>
> Je veux tous les enregistrements de T1 et de T2 (T1 inner join T2) + les
> enregistrements de T3 ((T1 inner join T2 Left Outer join T3) et jusque


là,
> ca va.
>
> SELECT T1.Code, T2.Code, T3.code FROM T2 inner join T1 on


T2.code=T1.code
> LEFT outer JOIN T3 on T2.numero=T3.numero WHERE T2.numeroID = '05460'
>
>
>
> Certains enregistrements de T3 existent aussi dans une table T4. Si


c'est le
> cas, je voudrais exclure de ma sélection ceux pour lesquels on a 'Oui'


dans
> le champ T4.TOTO . Et là, je rame grave.
>
> En Français, ça donnerait :
>
> Sélectionner tous les enregistrements de T1 et de T2, ajouter ceux de T3


qui
> correspondent à T2, mais ne les ajouter que si :
>
> - soit ils exsitent dans T4, et dans ce cas le champ T4.TOTO est égal à


oui
> - soit ils n'existent pas dans T4
>
>
> Je suis preneur de tout conseil, avec mes très sincères remerciements.
>
>
>
>


Avatar
JM
Bon, j'ai fais autrement, avec un critère sur T3, donc sans utiliser T4,
mais c'est de l'à peu près.

Merci.


"JM" a écrit dans le message de
news:
Merci Chrstian.

J'ai essayé, mais c'est pas bon, parce que ça élimine les enregistrements
(de mon select) qui n'existent pas dans T4.

C'est là la difficulté : il faut garder tous les enregistrements de T1 et


T2
d'une part, ceux de T3 d'autre part, sauf, pour T3, si un enregistrement
existant dans T4 avec le même 'code' a le champ TOTO à Oui. Mais il ne


faut
pas éliminer les enregistrements de T3 qui n'ont pas de correspondance


dans
T4, et c'est ce qui se passe avec le EXISTS.

Merci encore d'avoir répondu. Je n'ai toujours pas trouvé...

Cordialement.



"Christian Robert" (sansspam)> a écrit dans


le
message de news:
> Bonjour,
>
> Si c'est pour exclure les enregistrement qui ne correspondent pas à un
> critère dans T4, alors dans le WHERE je verrais bien :
>
> AND EXISTS(SELECT * FROM T4 WHERE champTx = champT4 AND .....)
>
> ou NOT EXISTS si le test est inverse.
>
> champTx = champT4 correspond à la jointure faite entre T4 et l'une des
> autres tables. Dans le SELECT laissez *.
>
> --
> Cordialement
>
> Christian Robert
> Consultant - Formateur chez Winwise
> MCT - MCDBA - MCSD
> MCTS & MCITP SQL Server 2005
>
>
> "JM" a écrit :
>
> > Bonjour.
> >
> > J'ai un problème avec un "Select inner + outer + outer" que je ne
parviens
> > pas à résoudre et me permets de solliciter votre avis.
> >
> >
> > Je veux tous les enregistrements de T1 et de T2 (T1 inner join T2) +


les
> > enregistrements de T3 ((T1 inner join T2 Left Outer join T3) et jusque
là,
> > ca va.
> >
> > SELECT T1.Code, T2.Code, T3.code FROM T2 inner join T1 on
T2.code=T1.code
> > LEFT outer JOIN T3 on T2.numero=T3.numero WHERE T2.numeroID = '05460'
> >
> >
> >
> > Certains enregistrements de T3 existent aussi dans une table T4. Si
c'est le
> > cas, je voudrais exclure de ma sélection ceux pour lesquels on a 'Oui'
dans
> > le champ T4.TOTO . Et là, je rame grave.
> >
> > En Français, ça donnerait :
> >
> > Sélectionner tous les enregistrements de T1 et de T2, ajouter ceux de


T3
qui
> > correspondent à T2, mais ne les ajouter que si :
> >
> > - soit ils exsitent dans T4, et dans ce cas le champ T4.TOTO est égal


à
oui
> > - soit ils n'existent pas dans T4
> >
> >
> > Je suis preneur de tout conseil, avec mes très sincères remerciements.
> >
> >
> >
> >




Avatar
Benoit
Bonjour
à tester :
SELECT T1.Code, T2.Code, T3.code FROM T2 inner join T1 on T2.code=T1.code
LEFT outer JOIN T3 on T2.numero=T3.numero
LEFT OUTER JOIN T4 on t3.?? = T4.??
WHERE T2.numeroID = '05460' AND ISNULL(T4.TOTO,'NON') = 'NON'

ISNULL peut peut-être remplacé par COALESCE

--
Benoit

"JM" a écrit dans le message de news:

Bon, j'ai fais autrement, avec un critère sur T3, donc sans utiliser T4,
mais c'est de l'à peu près.

Merci.


"JM" a écrit dans le message de
news:
Merci Chrstian.

J'ai essayé, mais c'est pas bon, parce que ça élimine les enregistrements
(de mon select) qui n'existent pas dans T4.

C'est là la difficulté : il faut garder tous les enregistrements de T1 et


T2
d'une part, ceux de T3 d'autre part, sauf, pour T3, si un enregistrement
existant dans T4 avec le même 'code' a le champ TOTO à Oui. Mais il ne


faut
pas éliminer les enregistrements de T3 qui n'ont pas de correspondance


dans
T4, et c'est ce qui se passe avec le EXISTS.

Merci encore d'avoir répondu. Je n'ai toujours pas trouvé...

Cordialement.



"Christian Robert" (sansspam)> a écrit dans


le
message de news:
> Bonjour,
>
> Si c'est pour exclure les enregistrement qui ne correspondent pas à un
> critère dans T4, alors dans le WHERE je verrais bien :
>
> AND EXISTS(SELECT * FROM T4 WHERE champTx = champT4 AND .....)
>
> ou NOT EXISTS si le test est inverse.
>
> champTx = champT4 correspond à la jointure faite entre T4 et l'une des
> autres tables. Dans le SELECT laissez *.
>
> --
> Cordialement
>
> Christian Robert
> Consultant - Formateur chez Winwise
> MCT - MCDBA - MCSD
> MCTS & MCITP SQL Server 2005
>
>
> "JM" a écrit :
>
> > Bonjour.
> >
> > J'ai un problème avec un "Select inner + outer + outer" que je ne
parviens
> > pas à résoudre et me permets de solliciter votre avis.
> >
> >
> > Je veux tous les enregistrements de T1 et de T2 (T1 inner join T2) +


les
> > enregistrements de T3 ((T1 inner join T2 Left Outer join T3) et
> > jusque
là,
> > ca va.
> >
> > SELECT T1.Code, T2.Code, T3.code FROM T2 inner join T1 on
T2.code=T1.code
> > LEFT outer JOIN T3 on T2.numero=T3.numero WHERE T2.numeroID =
> > '05460'
> >
> >
> >
> > Certains enregistrements de T3 existent aussi dans une table T4. Si
c'est le
> > cas, je voudrais exclure de ma sélection ceux pour lesquels on a
> > 'Oui'
dans
> > le champ T4.TOTO . Et là, je rame grave.
> >
> > En Français, ça donnerait :
> >
> > Sélectionner tous les enregistrements de T1 et de T2, ajouter ceux de


T3
qui
> > correspondent à T2, mais ne les ajouter que si :
> >
> > - soit ils exsitent dans T4, et dans ce cas le champ T4.TOTO est égal


à
oui
> > - soit ils n'existent pas dans T4
> >
> >
> > Je suis preneur de tout conseil, avec mes très sincères
> > remerciements.
> >
> >
> >
> >