查找两个SQL表之间的重复项

时间:2012-05-18 12:33:16

标签: c# asp.net sql select duplicates

我有两个表(Table1和Table2)具有相同的主键,比如说Key1和Key2。我需要做的是将Table1中的记录分成两组,重复项(表2中的记录)和非重复项。我知道我可以使用下面的内容,但这看起来很臃肿和重复。有没有更简洁的方法来做到这一点,可能只需一个电话?

SELECT Key1, Key2 FROM Table1 WHERE Key1 IN (SELECT Key1 FROM Table2) AND Key2 IN (SELECT Key2 FROM Table2);
SELECT Key1, Key2 FROM Table1 WHERE Key1 NOT IN (SELECT Key1 FROM Table2) AND Key2 NOT IN (SELECT Key2 FROM Table2);

此调用是从C#ASP.NET代码隐藏页面进行的。

2 个答案:

答案 0 :(得分:3)

此查询执行左外连接以确保返回table1中的所有记录。它连接在Table2上,如果没有匹配,则Table2中的任何列对于该行都将为NULL。在CASE语句中使用此行为来设置一个标志,告诉表2中Table1行的存在位置:

select t1.*,
    case when t2.Key1 is null then 'false' else 'true' end as IsDuplicate
from Table1 t1
left outer join Table2 t2 on t1.Key1 = t2.Key1
    and t1.Key2 = t2.Key2

然后,您可以根据IsDuplicate列在您的应用中进行过滤。

答案 1 :(得分:0)

检查SQL2008中的新upsert语句 Upsert in SQL2008