我不明白如何編寫一個簡單的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