在postgres中仅显示表中的重复行

时间:2015-11-26 04:42:48

标签: sql postgresql

我有这样的表:

--------------------------------------
| id | name | phone_number | address |
--------------------------------------
| 1  | Ram  | 9090909090   | Delhi   |
| 2  | Shyam| 9865444456   | Mumbai  |
| 3  | Mohan| 9756543455   | Chennai |
| 4  | Ram  | 9090909090   | Delhi   |
--------------------------------------

我想返回具有相同列数据的行。结果将是这样的:

--------------------------------------
| id | name | phone_number | address |
--------------------------------------
| 1  | Ram  | 9090909090   | Delhi   |
| 4  | Ram  | 9090909090   | Delhi   |
--------------------------------------

4 个答案:

答案 0 :(得分:2)

这可以使用窗口函数来完成,这避免了聚合数据的连接,并且通常是更快的方式:

select *
from (
  select id,name,phone_number,address
         count(*) over (partition by name,phone_number,address) as cnt
  from the_table
) t
where cnt > 1;

答案 1 :(得分:1)

SELECT t2.id,t2.name,t2.phone_number,t2.address
FROM
(
SELECT name,phone_number,address
FROM tableName
GROUP BY name,phone_number,address
HAVING COUNT(*) > 1
) AS t1
INNER JOIN tableName t2
ON t1.name=t2.name AND t1.phone_number=t2.phone_number AND t1.address=t2.address

答案 2 :(得分:1)

请运行以下查询,(将表名称视为" data"),以获得所需的结果,如下所示:

SELECT * FROM data where name IN (SELECT name FROM data GROUP BY name HAVING COUNT(*) > 1);

答案 3 :(得分:0)

SELECT T1.*
FROM
 table_name T1
 INNER JOIN table_name T2 ON 
      T1.name= T2.nam` AND 
         T1.phone_number= T2.phone_number AND T1.address= T2.address 
 WHERE T2.id <> T1.id