oracle - 根据多行的存在(序列号)从 SQL 中选择所有行

标签 oracle function count rows

假设我有类似于以下内容的表数据:

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。我将如何编写代码来仅选择该表中具有多行的记录?例如:

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

234567 Jane  Doe 1  Yellow 2001
234567 Jane  Doe 2  Red    2001

在 PL/SQL 中

最佳答案

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

 SELECT ID FROM table GROUP BY ID HAVING COUNT(*) > 1

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

 SELECT * FROM table WHERE ID IN (SELECT ID FROM table GROUP BY ID HAVING COUNT(*) > 1)

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

 SELECT * FROM table WHERE ID IN (SELECT ID FROM table WHERE SequenceID = 2)

要更快,但您最好确保数据库中保证满足要​​求(并且您希望在 (SequenceID, ID) 上建立复合索引)。

关于oracle - 根据多行的存在(序列号)从 SQL 中选择所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3927872/

相关文章:

mysql - 订购者: "count (columns not null)"

mysql - 使用计数选择查询

mysql - 为什么删除重复记录时出现 max(rowid) 或 min(rowid) ?

c# - 与 Oracle 的多个连接 - 多任务

C: 带函数的结构声明。存储大小未知

c++ - 具有不同返回类型的函数重载

r - R base 中的 all.equal() 不返回 TRUE

mysql - 我可以在单个 MySQL 命令中触发两个 select 语句并计算结果行数吗?

java - 插入日期在 SQL Developer 中有效,但在 Java 中无效

oracle - 如何在 Scala 中将一个类隐式转换为另一个类