假设我有类似于以下内容的表数据:
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/