Questo restituisce tutte le righe in cui esiste un duplicato :
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;
Non è chiaro dove leave_state <> 'refuse'
dovrebbe applicarsi. Dovresti definire i requisiti. Il mio esempio esclude le righe con leave_state = 'refuse'
(e leave_state IS NULL
con esso!) completamente.
ctid
è il surrogato di un povero per la tua chiave primaria non rivelata (non definita?).
Correlati:
- Come posso (o posso) SELEZIONARE DISTINCT su più colonne?
- In cosa è più facile leggere EXISTS sottoquery?