Maison  >  Questions et réponses  >  le corps du texte

La sous-requête a toujours des résultats dans ma requête

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粉677684876P粉677684876404 Il y a quelques jours485

répondre à tous(1)je répondrai

  • P粉269847997

    P粉2698479972023-09-12 20:45:22

    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

    répondre
    0
  • Annulerrépondre