[英]Select only the rows that aren't unique [MySQL]
我正在尝试进行查询以检查重复项,如果我发现重复项,我希望能够相应地进行更新。 例如,我有以下数据集,如何仅选择“位置”值相同的2行?
ID position 1 0 2 1 3 2 4 1 5 3
在此示例中,我将仅选择第2行和第4行。
SELECT t.position,
count(t.*) AS count
FROM table t
GROUP BY position
HAVING count(position) > 1
应该返回一个位置列表及其重复计数。
编辑:忽略别名我的表
如果要查看具有重复位置的行,请尝试:
SELECT t1.ID,
t1.position,
t2.ID,
t2.position
FROM table t1
INNER JOIN table t2
ON t1.ID < t2.ID
AND t1.position = t2.position
这将为您提供一组行(4列),其中有重复项。 复制将获得1行,一式三份获得3行,四元组获得6行,并且从该点开始增加。
为了进一步扩展Matt S的答案(正确的答案),您可以使用他的结果并加入原始表以获取确切的行:
select
id
,position
from table t
join (
select t1.position
from table t1
group by t1.position
having count(*) > 1
) list
on t.position = list.position
在WHERE子句中使用CTE或EXISTS()函数将使其更易于阅读,但我不知道MySQL在语法上支持什么(我是T-SQL的家伙:))。 这应该是ANSI。
Matt S的答案是通常可以得到想要的东西的方式。 为了稍微扩展scottE的答案(并且由于我们在谈论MySQL),如果输出令人满意,您也可以使用group_concat()来收集所需的信息。
SELECT group_concat(ID) as 'IDs', position
FROM table
GROUP BY position
HAVING count(position) > 1
应该返回您:
ID | 位置
2,4 | 1个
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.