选择那些具有多个条目的字段[重复]

Posted

技术标签:

【中文标题】选择那些具有多个条目的字段[重复]【英文标题】:select those fields that has more than one entry [duplicate] 【发布时间】:2013-04-13 17:37:08 【问题描述】:

我不明白如何编写仅显示这些条目的简单 sql 语句 不止一次出现。

例如

NodeID  Number

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

从表格中选择nodeIDnumber,其中数字出现不止一次且具有不同的nodeID

结果:

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

【问题讨论】:

【参考方案1】:
SELECT  a.*
FROM    TableName a
        INNER JOIN
        (
            SELECT  Number
            FROM    TableName
            GROUP   BY Number
            HAVING  COUNT(*) > 1
        ) b ON a.Number = b.Number
SQLFiddle Demo

另一种方法是使用EXISTS

SELECT  a.*
FROM    TableName a
WHERE   EXISTS
        (
            SELECT  1
            FROM    TableName b
            WHERE   a.Number = b.Number
            GROUP   BY Number
            HAVING  COUNT(*) > 1
        ) 
SQLFiddle Demo

【讨论】:

即使12 重复出现nodeID sqlfiddle.com/#!2/97d68/1/0 也会选择记录。认为我误解了这个问题? @Ejay 答案基于上面的示例。你有关于重复的观点,但如果 OP 对每个组合都有唯一约束,则可以避免这种情况。 @Ejay 这是您的解决方案示例,sqlfiddle.com/#!2/97d68/4 太好了 :) 您的解决方案确实解决了 OP 的问题。我只是对重复案例感到好奇【参考方案2】:

试试这个

SELECT NodeID , Number FROM TableName WHERE Number IN
(SELECT Number FROM TableName  GROUP BY Number HAVING  COUNT(*) > 1)

【讨论】:

【参考方案3】:

你也可以使用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) 

DEMO

【讨论】:

【参考方案4】:

我的第一个想法是像下面这样进行自我加入,但它不起作用,因为分组发生在之后。

SELECT T1.NodeId, T2.Number, COUNT(T2.Number) C 从表 T1 INNER JOIN 表 T2 使用(数字) 其中 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)

【讨论】:

以上是关于选择那些具有多个条目的字段[重复]的主要内容,如果未能解决你的问题,请参考以下文章

具有相同键的多个条目的字典[重复]

在数据库中查找特定字段的重复条目

Django admin,多对多字段,多个重复条目

生成具有指定条目长度重复的有序选择

如何在 MySQL 中删除具有几个相同值的行?

删除 SQL 中的重复行