La sous-requête a toujours des résultats dans ma requête
P粉677684876
P粉677684876 2023-09-11 22:06:01
0
1
533

J'ai deux tables dans MySQL :

Tableau 1 - ORDRES DE TRAVAIL

ID Quantité
1 2
2 1

Tableau 2 - ARTICLES DANS LES COMMANDES DE TRAVAIL

ID Bon de travail
1 1
2 1
3 2

J'ai une question :

SELECT WORKORDERS.ID
      , WORKORDERS.QUANTITY AS NOMINAL_QTY
      , COUNT(ITEMSINWORKORDERS.WORKORDER) AS ENTERED_QTY
FROM  WORKORDERS JOIN ITEMSINWORKORDERS ON
         ITEMSINWORKORDERS.WORKORDER = WORKORDERS.ID
WHERE WORKORDERS.QUANTITY >
        ( SELECT COUNT(ITEMSINWORKORDERS.WORKORDER )
          FROM   WORKORDERS INNER JOIN ITEMSINWORKORDERS ON
                    ITEMSINWORKORDERS.WORKORDER = WORKORDERS.ID
        )

À l'origine, j'utilisais une jointure externe gauche dans l'instruction, je l'ai donc remplacée par une jointure interne, dans l'espoir d'obtenir un ensemble vide. Comment puis-je lui faire renvoyer un ensemble vide lorsqu'il n'y a aucun bon de travail avec des entrées manquantes ?

Le but de cette requête est de rechercher tous les bons de travail pour lesquels toutes les entrées n'ont pas été saisies et dont la quantité nominale saisie dans la table WORKORDERS est supérieure à la quantité d'enregistrements ITEMSINWORKORDERS correspondant à ce bon de travail. Je m'attendais à ce qu'un ensemble vide soit renvoyé. Mais en fait, ce que j'ai eu, c'est

ID NOMINAL_QTY ENTERED_QTY
NULL NULL 0

À l'origine, j'utilisais une jointure externe gauche dans l'instruction, je l'ai donc remplacée par une jointure interne, dans l'espoir d'obtenir un ensemble vide.

Ajouté : J'ai essayé d'utiliser NULLIF pour résoudre ce problème comme suit :

SELECT WORKORDERS.ID
    , WORKORDERS.QUANTITY AS NOMINAL_QTY
    , NULLIF(COUNT(ITEMSINWORKORDERS.WORKORDER), 0) AS ENTERED_QTY
FROM WORKORDERS JOIN ITEMSINWORKORDERS ON
    ITEMSINWORKORDERS.WORKORDER = WORKORDERS.ID
WHERE WORKORDERS.QUANTITY >
    ( SELECT COUNT( ITEMSINWORKORDERS.WORKORDER )
    FROM WORKORDERS INNER JOIN ITEMSINWORKORDERS ON
        ITEMSINWORKORDERS.WORKORDER = WORKORDERS.ID
    )

Mais les résultats que j'obtiens sont frustrants :

ID NOMINAL_QTY ENTERED_QTY
NULL NULL NULL

P粉677684876
P粉677684876

répondre à tous(1)
P粉269847997

Je ne sais pas à quoi vous vous attendez puisque votre requête ne renvoie aucune ligne.

Mais pour que le comptage fonctionne, vous devez utiliser GROUP BY.

db<>violon ici

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal