【发布时间】:2021-09-01 08:33:15
【问题描述】:
这是我的简化陈述
SELECT ...
FROM tab1 AS i FULL OUTER JOIN tab2 AS d ON i.[Id]=d.[Id]
WHERE d.[Data]<>i.[Data] OR
(d.[Data] IS NULL AND i.[Data] IS NOT NULL) OR
(d.[Data] IS NOT NULL AND i.[Data] IS NULL)
我想获取所有的条目
- i.[Data] 与 d.[Data] 不同
- 表 i 或 d 中至少有一个值不为空
所以我不想看到记录 was 和 i 和 d 包含相同的数据或者都是 NULL。
我的陈述看起来又长又复杂。有没有更简单的方法?
使用ISNULL(d.[Data],'')<>ISNULL(i.[Data],'') 适用于文本,但不适用于DATE 或TIME(0) 列。
我的陈述适用于所有类型。
【问题讨论】:
-
您可以在第二次比较中只使用正确类型的常量 - 我认为您应该知道您的列类型?
-
不幸的是,他们仍然没有实现标准
IS DISTINCT FROM,这正是您在单个运算符中想要的。但它只是在标准中出现了两年,所以你能期待什么.. -
@Damien_The_Unbeliever 查看我的回答和Paul White
标签: sql-server tsql