Dit retourneert alle rijen waar een duplicaat bestaat :
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;
Het is onduidelijk waar leave_state <> 'refuse'
zou moeten gelden. Je zou eisen moeten definiëren. Mijn voorbeeld sluit rijen uit met leave_state = 'refuse'
(en leave_state IS NULL
mee!) helemaal.
ctid
is een surrogaat van een arme man voor uw geheime (ongedefinieerde?) primaire sleutel.
Gerelateerd:
- Hoe kan (of kan ik) DISTINCT SELECTEREN op meerdere kolommen?
- Wat is gemakkelijker in te lezen BESTAAT er subquery's?