0

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

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 代码隐藏页面进行的。

4

2 回答 2

3

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

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列在您的应用程序中进行过滤。

于 2012-05-18T12:37:59.400 回答
0

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

于 2012-05-18T12:40:49.870 回答