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
from
klausa. - Filter itu dengan menerapkan
join
yang ditentukan kriteria dan menghilangkan baris yang tidak lulus tes yang ditentukan. - Terapkan kriteria filter yang ditentukan di
where
klausa, menghapus baris yang tidak lulus tes yang ditentukan. - Urutkan hasil yang ditetapkan pada ekspresi yang ditentukan dalam
group by
klausa 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
select
daftar kolom pernyataan. - Urutkan hasil akhir ini berdasarkan kolom/ekspresi yang ditentukan dalam
order by
klausa.
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.status
dengan kriteria bergabung:left join requests req on req.app_id = apps.id and req.uid = {$user_id} and req.status in (2,5)