如何选择非“唯一”行
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 行(唯一)