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