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;