Subquery sentiasa mempunyai hasil dalam pertanyaan saya
P粉677684876
P粉677684876 2023-09-11 22:06:01
0
1
535

Saya mempunyai dua jadual dalam MySQL:

Jadual 1 - PEKERJA

ID Kuantiti
1 2
2 1

Jadual 2 - ITEMSINWORKORDERS

ID Arahan Kerja
1 1
2 1
3 2

Saya ada pertanyaan:

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
        )

Pada asalnya, saya menggunakan sambung luar kiri dalam penyata, jadi saya menukarnya kepada sambung dalam, dengan harapan dapat set kosong. Bagaimanakah saya boleh mengembalikan set kosong apabila tiada pesanan kerja dengan entri yang hilang?

Tujuan pertanyaan ini adalah untuk mencari semua pesanan kerja yang tidak memasukkan semua entri dan kuantiti nominal yang dimasukkan dalam jadual WORKORDERS adalah lebih besar daripada kuantiti rekod ITEMSINWORKORDERS yang sepadan dengan pesanan kerja tersebut. Saya menjangkakan satu set kosong akan dikembalikan. Tetapi sebenarnya, apa yang saya dapat ialah

ID JUMLAH_NOMINAL MASUK_QTY
NULL NULL 0

Pada asalnya, saya menggunakan sambung luar kiri dalam penyata, jadi saya menukarnya kepada sambung dalam, dengan harapan dapat set kosong.

Ditambah: Saya cuba menggunakan NULLIF untuk menyelesaikan masalah ini seperti berikut:

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
    )

Tetapi keputusan yang saya dapat mengecewakan:

ID JUMLAH_NOMINAL MASUK_QTY
NULL NULL NULL

P粉677684876
P粉677684876

membalas semua(1)
P粉269847997

Saya tidak tahu apa yang anda jangkakan kerana pertanyaan anda tidak mengembalikan sebarang baris.

Tetapi untuk membuat pengiraan berfungsi, anda perlu menggunakan GROUP BY.

db<>fiddle di sini

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan