Sql 查找在某个列中具有值且多次出现的所有行

Sql 查找在某个列中具有值且多次出现的所有行,sql,postgresql,Sql,Postgresql,假设我有一个包含两列的数据库,一个id(bigint)和一个text(text)。我想查找数据库中id出现在多行中的所有行。我怎么能这么做 例如: 1; foo 2; bar 3; baz 2; fubar 4; blah 3; bleh 期望输出: 2; bar 2; fubar 3; baz 3; bleh 我对SQL很陌生。我有一个想法,就是我想要的东西与 SELECT id,text FROM mytable ORDER BY id ASC; 但我不知道如何消除id唯一的行

假设我有一个包含两列的数据库,一个id(bigint)和一个text(text)。我想查找数据库中id出现在多行中的所有行。我怎么能这么做

例如:

1; foo  
2; bar 
3; baz
2; fubar
4; blah
3; bleh
期望输出:

2; bar 
2; fubar
3; baz
3; bleh
我对SQL很陌生。我有一个想法,就是我想要的东西与

SELECT id,text FROM mytable ORDER BY id ASC;
但我不知道如何消除id唯一的行。我需要基本上与
选择DISTINCT
相反的选项。提前谢谢

类似这样:

WITH more_than_one AS (SELECT id,count(*) FROM table1 GROUP BY id HAVING count(*) > 1)
SELECT * FROM table1 JOIN more_than_one ON table1.id = more_than_one.id;
大概是这样的:

WITH more_than_one AS (SELECT id,count(*) FROM table1 GROUP BY id HAVING count(*) > 1)
SELECT * FROM table1 JOIN more_than_one ON table1.id = more_than_one.id;

可以使用窗口功能执行此操作:

select id, text
from (select t.*, count(*) over (partition by id) as cnt
      from table t
     ) t
where cnt > 1;

可以使用窗口功能执行此操作:

select id, text
from (select t.*, count(*) over (partition by id) as cnt
      from table t
     ) t
where cnt > 1;

非常感谢。我已经接近你的AS子句了,但是如果没有你的帮助,我想我不可能得到全部信息。有了窗口函数,查询可以在一次扫描中完成。您当前的查询执行2次扫描和一次连接。谢谢!我已经接近你的AS子句了,但是如果没有你的帮助,我想我不可能得到全部信息。有了窗口函数,查询可以在一次扫描中完成。您当前的查询执行两次扫描和一次连接。据我所知,如果不使用嵌套查询,我认为没有一种简单的方法可以完成此操作。您是否尝试过使用“分组依据”和“必须”来显示具有重复ID的行选择COUNT(*)、id、text FROM my_Table GROUP BY id have COUNT(id)>1'据我所知,如果不使用嵌套查询,我认为没有一种简单的方法可以做到这一点。您是否尝试过使用“分组依据”和“必须”来显示具有重复ID的行按id从my_表组中选择COUNT(*)、id、text,COUNT(id)>1'这里不应该是我表的名称吗?我对第三个房间外面的
t
感到困惑line@PurpleVermont第三行中的
t
是括号中子查询的名称。您可以将其更改为任何名称。您的表名将从部分转到
,而不是
。啊,谢谢,我很困惑,因为它与列中的表名是同一个变量。另外,我认为表中的
是错误的,我们只需要
中的
,对吗?如果子查询从未被引用,为什么子查询需要/获取名称?
table
将作为您的表名。@PurpleVermont。这些查询不是特别占用内存。您应该检查Postgres的内存设置。如果问题仍然存在,请在dba.stackexchange.com上询问。t是否应该是我的表名?我对第三个房间外面的
t
感到困惑line@PurpleVermont第三行中的
t
是括号中子查询的名称。您可以将其更改为任何名称。您的表名将从
部分转到
,而不是
。啊,谢谢,我很困惑,因为它与列中的表名是同一个变量。另外,我认为表中的
是错误的,我们只需要
中的
,对吗?如果子查询从未被引用,为什么子查询需要/获取名称?
table
将作为您的表名。@PurpleVermont。这些查询不是特别占用内存。您应该检查Postgres的内存设置。如果问题仍然存在,请访问dba.stackexchange.com。