suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Die Unterabfrage liefert in meiner Abfrage immer Ergebnisse

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

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

P粉677684876P粉677684876443 Tage vor519

Antworte allen(1)Ich werde antworten

  • P粉269847997

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

    我不知道你期望什么,因为你的查询没有返回任何行。

    但是要使计数工作,你需要使用GROUP BY

    db<>fiddle 在这里

    Antwort
    0
  • StornierenAntwort