Bonjour,

on me demande de faire une petite requete,
Le principe récuperer les articles dont le AS_STATUT_DIV correspond à un code rupture et qui soit ne sont pas ou pas en cours dans la table de commentaire de rupture, soit que le code de rupture de la table commentaire ne soit pas le même que l'actuel.

J'obtiens cette requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
 SELECT Tab1.AP_CODE, AS_LIB_40, Tab1.AS_STATUT_DIV 
    FROM  (
            SELECT ARTICLE_P.AP_CODE, AS_LIB_40, AS_STATUT_DIV FROM ARTICLE_S, ARTICLE_P
            WHERE ARTICLE_S.AS_NUMERO = ARTICLE_P.AS_NUMERO 
            AND ( 
             ARTICLE_S.AS_STATUT_DIV = 'ZC'
             OR ARTICLE_S.AS_STATUT_DIV = 'ZM'
             OR ARTICLE_S.AS_STATUT_DIV = 'ZK'
             OR ARTICLE_S.AS_STATUT_DIV = 'ZR'
            )
        ) Tab1,ARTICLE_COMMENT_RUPTURE
    WHERE
    (ARTICLE_COMMENT_RUPTURE.AP_CODE  =  Tab1.AP_CODE AND ARTICLE_COMMENT_RUPTURE.AS_STATUT_DIV <> Tab1.AS_STATUT_DIV  AND ACR_DATE_FIN IS NULL)
    OR
    (
      ( tab1.AP_CODE NOT IN (SELECT AP_CODE FROM ARTICLE_COMMENT_RUPTURE WHERE ACR_DATE_FIN IS NULL))
    );
Mais pour une raison que j'ignore si la table ARTICLE_COMMENT_RUPTURE est vide ma requête ne me retourne rien et dès qu'il y a une ilgne elle marche normalement.

une forme qui marche mais que je trouve moins sympa passe par l'union :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
 SELECT Tab1.AP_CODE, AS_LIB_40, Tab1.AS_STATUT_DIV 
    FROM  (
            SELECT ARTICLE_P.AP_CODE, AS_LIB_40, AS_STATUT_DIV FROM ARTICLE_S, ARTICLE_P
            WHERE ARTICLE_S.AS_NUMERO = ARTICLE_P.AS_NUMERO 
            AND ( 
             ARTICLE_S.AS_STATUT_DIV = 'ZC'
             OR ARTICLE_S.AS_STATUT_DIV = 'ZM'
             OR ARTICLE_S.AS_STATUT_DIV = 'ZK'
             OR ARTICLE_S.AS_STATUT_DIV = 'ZR'
            )
        ) Tab1,ARTICLE_COMMENT_RUPTURE
    WHERE
    (ARTICLE_COMMENT_RUPTURE.AP_CODE  =  Tab1.AP_CODE AND ARTICLE_COMMENT_RUPTURE.AS_STATUT_DIV <> Tab1.AS_STATUT_DIV  AND ACR_DATE_FIN IS NULL)
   UNION
SELECT Tab1.AP_CODE, AS_LIB_40, Tab1.AS_STATUT_DIV 
    FROM  (
            SELECT ARTICLE_P.AP_CODE, AS_LIB_40, AS_STATUT_DIV FROM ARTICLE_S, ARTICLE_P
            WHERE ARTICLE_S.AS_NUMERO = ARTICLE_P.AS_NUMERO 
            AND ( 
             ARTICLE_S.AS_STATUT_DIV = 'ZC'
             OR ARTICLE_S.AS_STATUT_DIV = 'ZM'
             OR ARTICLE_S.AS_STATUT_DIV = 'ZK'
             OR ARTICLE_S.AS_STATUT_DIV = 'ZR'
            )
        ) Tab1
WHERE
      ( tab1.AP_CODE NOT IN (SELECT AP_CODE FROM ARTICLE_COMMENT_RUPTURE WHERE ACR_DATE_FIN IS NULL))
si quelqu'un pouvait me dire pourquoi ma première requête ne marche pas dans le cas de "ARTICLE_COMMENT_RUPTURE" à vide et si il y a moyen de corriger ca.

Je vous remercie d'avance.