Pesan kesalahan memberitahu Anda:
agregat tidak diperbolehkan dalam klausa WHERE
count()
adalah fungsi agregat. Gunakan klausa HAVING untuk itu.
Kueri dapat terlihat seperti ini:
SELECT r.*
FROM recommendations r
JOIN approvals a ON a.recommendation_id = r.id
WHERE r.user_id = $current_user_id
GROUP BY r.id
HAVING count(a.recommendation_id) = 1
Dengan PostgreSQL 9.1 atau yang lebih baru, cukup untuk GROUP BY
kunci utama tabel (dengan asumsi recommendations.id
adalah PKnya). Dalam versi Postgres sebelum 9.1 Anda harus memasukkan semua kolom SELECT
daftar yang tidak digabungkan dalam GROUP BY
daftar. Dengan recommendations.*
di SELECT
list, itu akan menjadi setiap kolom tabel.
Saya mengutip catatan rilis PostgreSQL 9.1:
Izinkan non-
GROUP BY
kolom dalam daftar target kueri saat kunci utama ditentukan diGROUP BY
klausa (Peter Eisentraut)
Sederhana dengan sub-pilihan
Either way, ini lebih sederhana dan lebih cepat, melakukan hal yang sama:
SELECT *
FROM recommendations r
WHERE user_id = $current_user_id
AND (SELECT count(*)
FROM approvals
WHERE recommendation_id = r.id) = 1;
Hindari mengalikan baris dengan JOIN
apriori, maka Anda tidak perlu menggabungkannya kembali.