假设我的表数据类似于以下内容:
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
中答案 0 :(得分:4)
首先,要查找具有多行的记录的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))。
答案 1 :(得分:2)
尝试以下内容。这是一个表格扫描,而不是像其他人一样。
SELECT * FROM (
SELECT t1.*, COUNT(name) OVER (PARTITION BY name) mycount FROM TABLE t1
)
WHERE mycount >1;
答案 2 :(得分:0)
查看HAVING
子句以获取摘要查询。你可以指定像
HAVING COUNT(*) >= 2
等等。
答案 3 :(得分:0)
INNER JOIN
JOIN:
SELECT u1.ID, u1.fname, u1.lname, u1.seq_no, u1.color, u1.date
FROM users u1 JOIN users u2 ON (u1.ID = u2.ID and u2.seq_no = 2)
其中:
SELECT u1.ID, u1.fname, u1.lname, u1.seq_no, u1.color, u1.date
FROM users u1, thetable u2
WHERE
u1.ID = u2.ID AND
u2.seq_no = 2