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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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.
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.
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. > > > >
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" <christian.robert@winwise.fr (sansspam)> a écrit dans le
message de news:2FD57765-CB72-4876-B4B5-0FE8AD07C6C1@microsoft.com...
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.
>
>
>
>
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. > > > >
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. > > > > > > > >
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" <jm@bidon.bidon> a écrit dans le message de
news:ulsEkRuiGHA.3496@TK2MSFTNGP04.phx.gbl...
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" <christian.robert@winwise.fr (sansspam)> a écrit dans
le
message de news:2FD57765-CB72-4876-B4B5-0FE8AD07C6C1@microsoft.com...
> 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.
> >
> >
> >
> >
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. > > > > > > > >
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. > > > > > > > >
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" <jm@bidon.bidon> a écrit dans le message de news:
uBev16uiGHA.1640@TK2MSFTNGP02.phx.gbl...
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" <jm@bidon.bidon> a écrit dans le message de
news:ulsEkRuiGHA.3496@TK2MSFTNGP04.phx.gbl...
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" <christian.robert@winwise.fr (sansspam)> a écrit dans
le
message de news:2FD57765-CB72-4876-B4B5-0FE8AD07C6C1@microsoft.com...
> 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.
> >
> >
> >
> >
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. > > > > > > > >