برای پیدا کردن مقادیر تکراری می توانید از group by استفاده نمایید. اما برای یافتن رکوردهایی که دارای مقادیر تکراری هستند می توانید با استفاده از یک left join با مقادیر تکراری آنها را پیدا کنید.
WITH a AS
(SELECT 1 ID, 1 b, 1 c
FROM DUAL
UNION ALL
SELECT 2, 2, 1
FROM DUAL
UNION ALL
SELECT 3, 2, 1
FROM DUAL
UNION ALL
SELECT 4, 3, 1
FROM DUAL
UNION ALL
SELECT 5, 3, 1
FROM DUAL
UNION ALL
SELECT 6, 3, 1
FROM DUAL)
SELECT a.*
FROM a
LEFT JOIN
(SELECT MIN (ID) AS ID, b, c
FROM a
GROUP BY b, c) aa ON a.ID = aa.ID
WHERE aa.ID IS NULL;
ID B C
---------- ---------- ----------
6 3 1
5 3 1
3 2 1
3 rows selected.
شما در بالا تمام رکوردهای تکراری را دارید و در زیر مقادیر تکراری را:
WITH a AS
(SELECT 1 ID, 1 b, 1 c
FROM DUAL
UNION ALL
SELECT 2, 2, 1
FROM DUAL
UNION ALL
SELECT 3, 2, 1
FROM DUAL
UNION ALL
SELECT 4, 3, 1
FROM DUAL
UNION ALL
SELECT 5, 3, 1
FROM DUAL
UNION ALL
SELECT 6, 3, 1
FROM DUAL)
SELECT b, c
FROM a
GROUP BY b, c
HAVING COUNT (*) > 1;
B C
---------- ----------
2 1
3 1
2 rows selected.