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 BYkolom dalam daftar target kueri saat kunci utama ditentukan diGROUP BYklausa (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.