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 |
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