首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据是否存在多行从SQL中选择所有行(序列号)

问根据是否存在多行从SQL中选择所有行(序列号)
EN

Stack Overflow用户
提问于 2010-10-14 04:49:07
回答 4查看 13K关注 0票数 2

假设我有类似于下面的表数据:

代码语言:javascript
复制
123456 John  Doe 1  Green  2001
234567 Jane  Doe 1  Yellow 2001
234567 Jane  Doe 2  Red    2001
345678 Jim   Doe 1  Red    2001

我尝试做的只是根据Jane Doe在这个表中有多行这一事实来隔离她的记录。(多个序列号)我无法根据ID、名称、颜色、年份等进行隔离...序列中的数字1告诉我,这是第一条记录,我需要能够显示该记录,以及数字2记录--更改记录。

如果表名为users,而字段名为ID、fname、lname、seq_no、color、date。我该如何编写代码来仅选择在此表中有多行的记录?例如:

我希望查询仅根据多行的存在来显示以下内容:

代码语言:javascript
复制
234567 Jane  Doe 1  Yellow 2001
234567 Jane  Doe 2  Red    2001

在PL/SQL中

EN

回答 4

Stack Overflow用户

发布于 2010-10-14 04:56:01

首先,要查找包含多行的记录的ID,您可以使用:

代码语言:javascript
复制
 SELECT ID FROM table GROUP BY ID HAVING COUNT(*) > 1

这样你就可以得到所有这些人的所有记录

代码语言:javascript
复制
 SELECT * FROM table WHERE ID IN (SELECT ID FROM table GROUP BY ID HAVING COUNT(*) > 1)

如果您知道第二个序列ID将始终为"2“,并且"2”记录永远不会被删除,您可能会发现类似以下内容:

代码语言:javascript
复制
 SELECT * FROM table WHERE ID IN (SELECT ID FROM table WHERE SequenceID = 2)

为了更快,您最好确保在数据库中满足这些要求(并且您可能希望在(SequenceID,ID)上使用复合索引)。

票数 4
EN

Stack Overflow用户

发布于 2010-10-14 05:19:43

尝试下面这样的方法。这是一个单独的表扫描,而不是像其他两个表扫描。

代码语言:javascript
复制
SELECT * FROM (
    SELECT t1.*, COUNT(name) OVER (PARTITION BY name) mycount FROM TABLE t1
)
WHERE mycount >1;
票数 2
EN

Stack Overflow用户

发布于 2010-10-14 04:51:09

查看摘要查询的HAVING子句。您可以指定如下内容

代码语言:javascript
复制
  HAVING COUNT(*) >= 2 

以此类推。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3927872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档