Dadurch werden alle Zeilen zurückgegeben, in denen ein Duplikat vorhanden ist :
SELECT employee_id, leave_date, no_of_days, leave_state
FROM hr_holidays_by_calendar h
WHERE EXISTS (
SELECT -- select list can be empty for EXISTS
FROM hr_holidays_by_calendar
WHERE employee_id = h.employee_id
AND leave_date = h.leave_date
AND leave_state <> 'refuse'
AND ctid <> h.ctid
)
AND leave_state <> 'refuse'
ORDER BY employee_id, leave_date;
Es ist unklar, wo leave_state <> 'refuse'
ist gelten sollte. Sie müssten Anforderungen definieren. Mein Beispiel schließt Zeilen mit leave_state = 'refuse'
aus (und leave_state IS NULL
damit!) vollständig.
ctid
ist ein Ersatz für den armen Mann für Ihren geheimen (undefinierten?) Primärschlüssel.
Verwandte:
- Wie kann ich (oder kann ich) DISTINCT für mehrere Spalten auswählen?
- Was ist einfacher einzulesen Existiert Unterabfragen?