Ich habe zwei Tische employee
und phones
. Ein Mitarbeiter kann 0 bis n Telefonnummern haben. Ich möchte die Namen der Mitarbeiter mit ihren Telefonnummern auflisten. Ich benutze die folgende Abfrage, die gut läuft.
SELECT empname,array_agg(phonenumber) AS phonenumbers
FROM employee LEFT OUTER JOIN phones ON employee.empid = phones.empid
GROUP BY employee.empid
Die Mitarbeitertabelle enthält möglicherweise eine große Anzahl von Zeilen. Ich möchte nur einige Mitarbeiter gleichzeitig abholen. Zum Beispiel möchte ich 3 Mitarbeiter mit ihren Telefonnummern abrufen. Ich versuche, diese Abfrage auszuführen.
SELECT empname,array_agg(phonenumber) AS phonenumbers
FROM
(SELECT * FROM employee ORDER BY empname LIMIT 3 OFFSET 0) AS employee
LEFT OUTER JOIN phones ON employee.empid = phones.empid
GROUP BY employee.empid
Aber ich bekomme diesen Fehler. ERROR: column "employee.empname" must appear in the GROUP BY clause or be used in an aggregate function
Der einzige Unterschied zwischen zwei Abfragen besteht darin, dass ich in letzterer Unterabfrage verwende, um die Zeilen vor dem Beitritt einzuschränken. Wie löse ich diesen Fehler?
quelle