OP berkata:
Masalahnya adalah where klausa memfilter kumpulan hasil, jadi pengujian Anda untuk req.status dari 2 atau 5 membuang apa pun di mana req.status adalah null karena tidak ada baris yang cocok dengan tabel applications .
Umum, teoretis (karena hanya implementasi sepele yang akan benar-benar melakukan hal seperti ini) urutan operasi untuk select pernyataannya adalah:
- Hasilkan produk kartesius lengkap dari setiap tabel yang tercantum di
fromklausa. - Filter itu dengan menerapkan
joinyang ditentukan kriteria dan menghilangkan baris yang tidak lulus tes yang ditentukan. - Terapkan kriteria filter yang ditentukan di
whereklausa, menghapus baris yang tidak lulus tes yang ditentukan. - Urutkan hasil yang ditetapkan pada ekspresi yang ditentukan dalam
group byklausa dan partisi hasil yang ditetapkan ke dalam grup. - Ciutkan setiap grup tersebut menjadi satu baris, hitung nilai semua fungsi agregat yang ditentukan.
- Hapus semua kolom dari kumpulan hasil yang tidak terdaftar di
selectdaftar kolom pernyataan. - Urutkan hasil akhir ini berdasarkan kolom/ekspresi yang ditentukan dalam
order byklausa.
Anda dapat melakukan salah satu dari dua hal berikut:
-
ubah kueri Anda untuk menguji nullity:
where...( req.status is null OR req.status in (2,5) )... -
pindahkan tes ke
req.statusdengan kriteria bergabung:left join requests req on req.app_id = apps.id and req.uid = {$user_id} and req.status in (2,5)