WITH users ( username,birth ) AS ( SELECT 'A' , '20170101' FROM DUAL UNION ALL SELECT 'A' , '20170101' FROM DUAL UNION ALL SELECT 'B' , '20170101' FROM DUAL UNION ALL SELECT 'B' , '20170102' FROM DUAL UNION ALL SELECT 'C' , '20170103' FROM DUAL ) SELECT A.username , B.birth FROM users A , (SELECT * FROM users GROUP BY username,birth HAVING COUNT(*) > 1 ) B WHERE A.username = B.username AND A.birth = B.birth
SELECT a.* FROM users a INNER JOIN (SELECT username, birth FROM users GROUP BY username, birth HAVING COUNT(*) > 1 ) b ON a.username = b.username AND a.birth = b.birth ; SELECT a.* FROM users a WHERE EXISTS (SELECT 1 FROM users b WHERE b.username = a.username AND b.birth = a.birth AND b.idx != a.idx -- PK ) ;
WITH users ( username,birth ) AS ( SELECT 'A' , '20170101' FROM DUAL UNION ALL SELECT 'A' , '20170101' FROM DUAL UNION ALL SELECT 'B' , '20170101' FROM DUAL UNION ALL SELECT 'B' , '20170102' FROM DUAL UNION ALL SELECT 'B' , '20170102' FROM DUAL UNION ALL SELECT 'C' , '20170103' FROM DUAL ) SELECT * FROM users a WHERE EXISTS ( SELECT 1 FROM users b WHERE a.username = b.username AND a.birth = b.birth GROUP BY username,birth HAVING COUNT(*) > 1)