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

Oracle 根据存在多行(序列号)从SQL中选择所有行,oracle,function,count,rows,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记录-更改

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

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、序号、颜色、日期。如何编写代码,以便仅选择此表中有多行的记录?例如:

我希望查询仅基于多行的存在来显示:

234567 Jane  Doe 1  Yellow 2001
234567 Jane  Doe 2  Red    2001
在PL/SQL中,检查HAVING子句以获得摘要查询。您可以指定如下内容

  HAVING COUNT(*) >= 2 

依此类推。

首先,要查找包含多行的记录的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上有一个复合索引。

内部联接

加入:

其中:

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

试试下面的方法。它是一个表CAN,而不是像其他表一样的2个表CAN

SELECT * FROM (
    SELECT t1.*, COUNT(name) OVER (PARTITION BY name) mycount FROM TABLE t1
)
WHERE mycount >1;

这就是Oracle开始崭露头角的地方。+1,但是-看起来数据的第一列是个人ID-如果它唯一地标识了一个人,我会在该ID列上进行计数,以防有两个同名的人。嘿:的确,很好地掌握了个人ID。是的,你可以很容易地用个人ID替换姓名。
SELECT * FROM (
    SELECT t1.*, COUNT(name) OVER (PARTITION BY name) mycount FROM TABLE t1
)
WHERE mycount >1;