假设我有类似于下面的表数据:
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中
发布于 2010-10-14 04:56:01
首先,要查找包含多行的记录的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)上使用复合索引)。
发布于 2010-10-14 05:19:43
尝试下面这样的方法。这是一个单独的表扫描,而不是像其他两个表扫描。
SELECT * FROM (
SELECT t1.*, COUNT(name) OVER (PARTITION BY name) mycount FROM TABLE t1
)
WHERE mycount >1;发布于 2010-10-14 04:51:09
查看摘要查询的HAVING子句。您可以指定如下内容
HAVING COUNT(*) >= 2 以此类推。
https://stackoverflow.com/questions/3927872
复制相似问题