Rumah  >  Soal Jawab  >  teks badan

Subquery sentiasa mempunyai hasil dalam pertanyaan saya

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粉677684876P粉677684876404 hari yang lalu486

membalas semua(1)saya akan balas

  • P粉269847997

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

    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

    balas
    0
  • Batalbalas