我不明白如何编写一个简单的sql语句,它只显示那些不止一次出现的条目 。选择那些有多个条目的字段
e.x.
NodeID Number
0 12
1 12
2 12
0 13
1 13
0 14
1 15
2 16
1 17
选择nodeID
,number
表,其中数出现一次以上不同nodeID
结果:
NodeID Number
0 12
1 12
2 12
0 13
1 13
我不明白如何编写一个简单的sql语句,它只显示那些不止一次出现的条目 。选择那些有多个条目的字段
e.x.
NodeID Number
0 12
1 12
2 12
0 13
1 13
0 14
1 15
2 16
1 17
选择nodeID
,number
表,其中数出现一次以上不同nodeID
结果:
NodeID Number
0 12
1 12
2 12
0 13
1 13
SELECT a.*
FROM TableName a
INNER JOIN
(
SELECT Number
FROM TableName
GROUP BY Number
HAVING COUNT(*) > 1
) b ON a.Number = b.Number
另一种方法是使用EXISTS
SELECT a.*
FROM TableName a
WHERE EXISTS
(
SELECT 1
FROM TableName b
WHERE a.Number = b.Number
GROUP BY Number
HAVING COUNT(*) > 1
)
试试这个
SELECT NodeID , Number FROM TableName WHERE Number IN
(SELECT Number FROM TableName GROUP BY Number HAVING COUNT(*) > 1)
你也可以使用EXISTS
没有GROUP BY
:
SELECT nodeid,
number
FROM Table1 t1
WHERE EXISTS(SELECT 1
FROM Table1 t2
WHERE t1.number = t2.number
AND t1.nodeid <> t2.nodeid)
我的第一个想法是做一个自我加入像下面,但它不会工作,因为分组发生之后。
SELECT T1.NodeId,T2.Number,COUNT(T2.Number)C FROM T1表 INNER JOIN表T2 USING(编号) WHERE C> 1 GROUP BY T2.Number
因此,你必须做分组首先选择,然后进行连接:
SELECT NodeId, Number
FROM Table T1
INNER JOIN (
SELECT Number, COUNT(Number) C
FROM Table
WHERE C > 1
GROUP BY Number
) T2 USING(Number)
这种选择即使'12'与重复'nodeID' http://www.sqlfiddle.com/#!2出现记录/ 97d68/1/0。认为我误解了这个问题? – Ejaz 2013-04-20 11:18:59
@Ejay答案基于上面的例子。您对重复有一点意见,但是如果OP对每个组合都有唯一的约束,则可以避免这种情况。 – 2013-04-20 11:26:58
@Ejay这里是你的解决方案,例如http://www.sqlfiddle.com/#!2/97d68/4 – 2013-04-20 11:28:08