Zwraca wszystkie wiersze, w których istnieje duplikat :
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;
Nie jest jasne, gdzie leave_state <> 'refuse'
powinno mieć zastosowanie. Musiałbyś zdefiniować wymagania. Mój przykład wyklucza wiersze z leave_state = 'refuse'
(i leave_state IS NULL
z tym!) całkowicie.
ctid
jest substytutem twojego nieujawnionego (niezdefiniowanego?) klucza podstawowego.
Powiązane:
- Jak (lub mogę) WYBRAĆ DISTINCT w wielu kolumnach?
- Co jest łatwiejsze do odczytania ISTNIEJĄ podzapytania?