OVH Cloud OVH Cloud

Pb SQL NOT EXISTS

2 réponses
Avatar
izme75000
Bonjour,
Je voudrais lister les client qui n'ont pas faits de dons, =E0 partir
d'une table CLIADR (qui contient tous les clients) et d'une table DONS
(qui ne contient que les clients qui ont fait un don)
Pour cela j'ex=E9cute cette requ=EAte :
SELECT ALL A.NUM_CLI_NO
FROM SCH_DWH.CA_CLIAD A
WHERE NOT EXISTS (SELECT DISTINCT * FROM SCH_DWH.CA_CLIAD A,
SCH_DWH.CA_DON B WHERE A.NUM_CLI_NO =3D B.NUM_CLI_NO)

C'est basique, et pourant ca ne fonctionne pas : j'ai un r=E9sultat vide
alors que j'ai bien des clients qui n'apparaissent pas dans la table
dons ...

2 réponses

Avatar
Christian
Bonjour,

Essayez plutôt avec un LEFT OUTER JOIN where (B.NUM_CLI_NO is null)

Christian


"izme75000" a écrit :

Bonjour,
Je voudrais lister les client qui n'ont pas faits de dons, à partir
d'une table CLIADR (qui contient tous les clients) et d'une table DONS
(qui ne contient que les clients qui ont fait un don)
Pour cela j'exécute cette requête :
SELECT ALL A.NUM_CLI_NO
FROM SCH_DWH.CA_CLIAD A
WHERE NOT EXISTS (SELECT DISTINCT * FROM SCH_DWH.CA_CLIAD A,
SCH_DWH.CA_DON B WHERE A.NUM_CLI_NO = B.NUM_CLI_NO)

C'est basique, et pourant ca ne fonctionne pas : j'ai un résultat vide
alors que j'ai bien des clients qui n'apparaissent pas dans la table
dons ...




Avatar
izme75000
Effectivement, j'ai le bon résultat avec ca :
SELECT A.NUM_CLI_NO
FROM SCH_DWH.CA_CLIAD A
LEFT OUTER JOIN SCH_DWH.CA_DON M
ON A.NUM_CLI_NO = M.NUM_CLI_NO
GROUP BY A.NUM_CLI_NO
HAVING COUNT(M.NUM_CLI_NO) = 0

Merci Christian !
Mais ca reste bizarre que le not exists ne réponde pas à ce
besoin....

Christian a écrit :

Bonjour,

Essayez plutôt avec un LEFT OUTER JOIN where (B.NUM_CLI_NO is null)

Christian


"izme75000" a écrit :

> Bonjour,
> Je voudrais lister les client qui n'ont pas faits de dons, à partir
> d'une table CLIADR (qui contient tous les clients) et d'une table DONS
> (qui ne contient que les clients qui ont fait un don)
> Pour cela j'exécute cette requête :
> SELECT ALL A.NUM_CLI_NO
> FROM SCH_DWH.CA_CLIAD A
> WHERE NOT EXISTS (SELECT DISTINCT * FROM SCH_DWH.CA_CLIAD A,
> SCH_DWH.CA_DON B WHERE A.NUM_CLI_NO = B.NUM_CLI_NO)
>
> C'est basique, et pourant ca ne fonctionne pas : j'ai un résultat vide
> alors que j'ai bien des clients qui n'apparaissent pas dans la table
> dons ...
>
>