如何选择非“唯一”行

Posted

技术标签:

【中文标题】如何选择非“唯一”行【英文标题】: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)

【问题讨论】:

您使用的是什么数据库,您使用的是哪个版本的数据库? How to Select Every Row Where Column Value is NOT Distinct的可能重复 它在 mysql 中工作,所以我添加了那个标签。我想知道 OP 是否可以将其更改为正确的 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 的非聚合列)跨度>

以上是关于如何选择非“唯一”行的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 where/have 子句选择唯一行并与另一个表进行比较

如何使用 Sequelize.JS 选择具有 2 个唯一列的所有行?

SQL 难题,如何选择零件的最新日期,但每个零件只有 1 行(唯一)

如何选择和计算每个唯一行的最常见的第一个值?

如何在 Oracle SQL 中不使用 distinct 选择从多个 max(case when) 派生的唯一行

如何在实体框架中的两个表之间进行左连接操作时从左表中选择唯一行