Ich habe zwei Tabellen in MySQL:
Tabelle 1 – ARBEITSAUFTRÄGE
ID | Menge |
---|---|
1 | 2 |
2 | 1 |
Tabelle 2 – ITEMSINWORKORDERS
ID | Arbeitsauftrag |
---|---|
1 | 1 |
2 | 1 |
3 | 2 |
Ich habe eine Frage:
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 )
Ursprünglich habe ich in der Anweisung einen linken äußeren Join verwendet, also habe ich ihn in einen inneren Join geändert, in der Hoffnung, einen leeren Satz zu erhalten. Wie kann ich dafür sorgen, dass ein leerer Satz zurückgegeben wird, wenn keine Arbeitsaufträge mit fehlenden Einträgen vorhanden sind?
Der Zweck dieser Abfrage besteht darin, alle Arbeitsaufträge zu finden, für die nicht alle Einträge eingegeben wurden und bei denen die in der Tabelle WORKORDERS eingegebene Nennmenge größer ist als die Menge der diesem Arbeitsauftrag entsprechenden ITEMSINWORKORDERS-Datensätze. Ich habe erwartet, dass ein leeres Set zurückgegeben wird. Aber eigentlich habe ich
bekommenID | NOMINAL_MENGE | ENTERED_MENGE |
---|---|---|
NULL | NULL | 0 |
Ursprünglich habe ich in der Anweisung einen linken äußeren Join verwendet, also habe ich ihn in einen inneren Join geändert, in der Hoffnung, einen leeren Satz zu erhalten.
Hinzugefügt: Ich habe versucht, dieses Problem mit NULLIF wie folgt zu lösen:
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 )
Aber die Ergebnisse, die ich erhalte, sind frustrierend:
ID | NOMINAL_MENGE | ENTERED_MENGE |
---|---|---|
NULL | NULL | NULL |
我不知道你期望什么,因为你的查询没有返回任何行。
但是要使计数工作,你需要使用
GROUP BY
。db<>fiddle 在这里