【问题标题】:How to select non "unique" rows如何选择非“唯一”行
【发布时间】:2010-12-23 14:27:38
【问题描述】:

我有下表,我必须从中获取非唯一行

id idA infos
0 201 1899
1 205 1955
2 207 1955
3 201 1959

我想获取infos 列的所有行,它们至少有两行具有相同的idA 值。

上表的查询输出必须是

infos
1899
1959 

我尝试了以下请求但没有成功:

  • SELECT idA FROM XXX WHERE NOT EXISTS(SELECT * FROM XXX GROUP BY idA)
  • SELECT * FROM XXX a WHERE NOT EXISTS(SELECT * FROM XXX b WHERE a.RVT_ID=b.RVT_ID GROUP BY idA)

【问题讨论】:

标签: mysql sql


【解决方案1】:

试试这个:

SELECT T1.idA, T1.infos
FROM XXX T1
JOIN
(
    SELECT idA
    FROM XXX
    GROUP BY idA
    HAVING COUNT(*) >= 2
) T2
ON T1.idA = T2.idA

您发布的数据的结果:

艾达信息 201 1899 201 1959

【讨论】:

    【解决方案2】:

    这样的事情应该可以工作:

    SELECT idA, COUNT(*) FROM XXX GROUP BY idA HAVING COUNT(*) > 1
    

    【讨论】:

      【解决方案3】:
      SELECT id, idA, COUNT(infos) AS cnt
      FROM mytable
      GROUP BY infos
      HAVING cnt > 1
      

      【讨论】:

        【解决方案4】:

        这可能就是你要找的东西:

        SELECT *, COUNT(DISTINCT infos) FROM table GROUP BY idA HAVING COUNT(DISTINCT infos) > 1;
        

        【讨论】:

        • 它不匹配“我想获取列信息的所有行,至少有两行具有相同的 idA 值。”
        【解决方案5】:

        这应该给出“信息”出现一次的所有行(在 MySQL 上测试)

        SELECT id, idA, count(infos) AS cnt
        FROM mytable
        GROUP BY infos
        HAVING cnt=1
        

        数据

        id  ida     infos
        1   201     1955
        2   202     1978
        3   203     1978
        4   204     1956
        5   0   1980
        

        结果

        id  idA     cnt
        1   201     1
        4   204     1
        5   0   1
        

        【讨论】:

        • 这不适用于所有数据库,它适用于 MySQL,但不适用于 MSSQL Server(后者不允许选择中不属于 group by 的非聚合列)跨度>
        猜你喜欢
        • 2013-07-04
        • 1970-01-01
        • 2019-07-05
        • 2021-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-05
        • 1970-01-01
        相关资源
        最近更新 更多