Saya menggunakan MySQL. Ini skema saya:
Pemasok ( sid: integer , sname: string, address string)
Bagian ( pid: integer , pname: string, color: string)
Katalog ( sid: integer, pid: integer , cost: real)
(kunci utama dicetak tebal)
Saya mencoba menulis kueri untuk memilih semua bagian yang dibuat oleh setidaknya dua pemasok:
-- Find the pids of parts supplied by at least two different suppliers.
SELECT c1.pid -- select the pid
FROM Catalog AS c1 -- from the Catalog table
WHERE c1.pid IN ( -- where that pid is in the set:
SELECT c2.pid -- of pids
FROM Catalog AS c2 -- from catalog
WHERE c2.pid = c1.pid AND COUNT(c2.sid) >= 2 -- where there are at least two corresponding sids
);
Pertama, apakah saya melakukannya dengan cara yang benar?
Kedua, saya mendapatkan kesalahan ini:
1111 - Penggunaan fungsi grup tidak valid
Apa yang saya lakukan salah?
sumber
Pertama, kesalahan yang Anda dapatkan adalah karena tempat Anda menggunakan
COUNT
fungsi - Anda tidak dapat menggunakan fungsi agregat (atau grup) diWHERE
klausa.Kedua, daripada menggunakan subkueri, cukup gabungkan tabel itu sendiri:
Yang saya percaya harus mengembalikan hanya baris di mana setidaknya dua baris ada dengan yang sama
pid
tetapi setidaknya ada 2sid
s. Untuk memastikan Anda mendapatkan kembali hanya satu baris perpid
saya telah menerapkan klausa pengelompokan.sumber
COUNT(DISTINCT sid)
kueri yang telah diperbarui.sid
selalu harus berbeda pula, karenasid
danpid
bersama - sama membentuk kunci utama untukCatalog
?