【发布时间】:2014-06-12 19:14:27
【问题描述】:
我正在尝试在 T-SQL 中做这样的事情:
SELECT ID
FROM table
WHERE (ID, Firstname, Lastname) IN
(SELECT ID, Firstname, Lastname
FROM table
GROUP BY ID, Firstname, Lastname
HAVING (COUNT(ID) > 1) AND (COUNT(Firstname) > 1) AND (COUNT(Lastname) > 1))
基本上,如果有一行的 ID、Firstname 和 Lastname 的值在另一行中同时重复,我想选择它的 ID。我了解have子句的设置方式,它不会那样工作,但请耐心等待。我希望它像这样工作:
ID Firstname Lastname age
-------------------------
01 Bob Smith 25
01 Bob Smith 35
03 Bob Smith 25
03 Mike Smith 25
03 Bob Baloney 25
在上面的示例中,仅选择了“01”,因为它与三列中它下方的字段匹配。 '03' 与任何两列中的 ID、名字或姓氏都不完全匹配,因此不会被选中。此外,它是否匹配年龄也没关系,因为我不在乎年龄。
如果我添加这样的列:
ID Firstname Lastname age
-------------------------
01 Bob Smith 25
01 Bob Smith 35
03 Bob Smith 25
03 Mike Smith 25
03 Bob Baloney 25
03 Mike Smith 32
THEN '03' 也将被选中,因为它现在匹配三个相关字段,其中记录在其上方两行。
我已经看到使用派生表来弥补对复合 WHERE-IN 子句支持不足的答案,但我不确定如何将唯一性的想法添加到子查询中。
非常感谢!
【问题讨论】:
标签: sql sql-server unique where composite-key