0

複数回出現するエントリのみを表示する単純な sql ステートメントを作成する方法がわかりません。

NodeID  Number

0       12
1       12
2       12
0       13
1       13
0       14
1       15
2       16
1       17

番号が異なる複数回出現する表からnodeID、を選択します。numbernodeID

結果:

NodeID  Number
0       12
1       12
2       12
0       13
1       13
4

4 に答える 4

3
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
        ) 
于 2013-04-20T11:14:57.797 に答える
0

これを試して

SELECT NodeID , Number FROM TableName WHERE Number IN
(SELECT Number FROM TableName  GROUP BY Number HAVING  COUNT(*) > 1)
于 2013-04-20T11:17:33.263 に答える
0

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) 

デモ

于 2013-04-20T11:18:45.847 に答える
0

私の最初のアイデアは、以下のような自己結合を行うことでしたが、後でグループ化が行われるため機能しません。

SELECT T1.NodeId, T2.Number, COUNT(T2.Number) C FROM Table T1 INNER JOIN Table T2 USING(Number) 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)
于 2013-04-20T11:20:23.483 に答える