我们有一个具有以下结构的表格 - 表(id,key_type,key_value)其中(id,key_type)是主键。
由于软件写入此表的某些错误,可能会出现(key_type,key_value)具有相同组合但具有不同ID的情况。
我们希望找出所有这些不正确的数据,其中(key_type,key_value)的所有组合都是相同的,即使id可能不同。
有趣的是,这种组合的数量会有所不同,即它们在所有ID中都不相同。
例如,
如果行是 -
查询应标记ids(1& 2)和(3& 5) 也许解决方案是微不足道的,但我会把它归咎于我对SQL的一点经验。 有人可以帮帮我,谢谢!
答案 0 :(得分:0)
SELECT count(*), key_type, key_value
FROM YourTable
GROUP BY key_type, key_value
HAVING count(*) > 1
这将为您提供重复或重复等重复类型和值
如果您还想要ID,则可以使用子查询来获取它们存在的行以及重复项集
SELECT ID, key_type, key_value
FROM YourTable y
INNER JOIN
(
SELECT count(*), key_type, key_value
FROM YourTable
GROUP BY key_type, key_value
HAVING count(*) > 1
) dup ON y.key_value = dup.key_value and y.key_type = dup.key_type
答案 1 :(得分:0)
SELECT distinct id
from T1 t
inner join (
SELECT key_type, key_value
FROM T1
GROUP BY key_type, key_value
HAVING count(distinct id) > 1
) td on t.key_type = td.key_type and t.key_value = td.key_value
<强>输出:强>
id
-----------
1
2
3
5
答案 2 :(得分:0)
我可以告诉你你的bug在哪里,那是在主键中。您有一个与key_type结合的自动编号(id)。这将始终允许key_type / key_value的重复值,因为id将始终是唯一的并且是密钥的一部分。
通过使key_type和key_value成为主键并删除id,你将为自己避免前进的痛苦。否则,将id设为唯一的主键