查询应用程序T-SQL连接

时间:2011-11-11 15:53:38

标签: sql

我们有一个具有以下结构的表格 - 表(id,key_type,key_value)其中(id,key_type)是主键。

由于软件写入此表的某些错误,可能会出现(key_type,key_value)具有相同组合但具有不同ID的情况。

我们希望找出所有这些不正确的数据,其中(key_type,key_value)的所有组合都是相同的,即使id可能不同。

有趣的是,这种组合的数量会有所不同,即它们在所有ID中都不相同。

例如,

如果行是 -

  1. (1,type1,value1)
  2. (1,type2,value2)
  3. (2,type1,value1)
  4. (2,type2,value2)
  5. (3,type3,value3)
  6. (4,type4,value4)
  7. (5,type3,value3)
  8. (6,type1,value1)
  9. (6,type3,value3)
  10. 查询应标记ids(1& 2)和(3& 5) 也许解决方案是微不足道的,但我会把它归咎于我对SQL的一点经验。 有人可以帮帮我,谢谢!

3 个答案:

答案 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设为唯一的主键