Way*_*ton 6 sql t-sql sql-server
如果您执行的连接看起来像这样
SELECT T1.KeyField1, T1.KeyField2, T2.Field3
FROM T1 JOIN T2 ON T1.KeyField1 = T2.KeyField1 AND T1.KeyField2 = T2.KeyField2
Run Code Online (Sandbox Code Playgroud)
有没有办法不允许NULLS匹配类似于此查询将返回的结果
SELECT T1.KeyField1, T1.KeyField2, T2.Field3
FROM T1 JOIN T2 ON T1.KeyField1 = T2.KeyField1 AND T1.KeyField2 = T2.KeyField2
AND T1.KeyField2 IS NOT NULL AND T2.KeyField2 IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
编辑
我实际上问了这个问题......让我再试一次.
我们正在将新数据与旧数据进行比较,并查找行完全相同的记录.
所以两个表都定义了:
CREATE TABLE [Table](
[Identifier] [int] IDENTITY(1,1) NOT NULL,
[Key1] [varchar](50) NOT NULL,
[Data1] [varchar](50) NULL,
[Data2] [varchar](50) NULL
Run Code Online (Sandbox Code Playgroud)
如果我查询:
DELETE
FROM T1 JOIN T2 ON T1.Key1 = T2.Key1
AND T1.Data1 = T2.Data2 AND T1.Data2 = T2.Data2
Run Code Online (Sandbox Code Playgroud)
给
T1 & T2
| Key1 | Data1 | Data2 |
| 1000 | 123 Main St | <NULL> |
| 1001 | 456 High St | FLOOR 2 |
Run Code Online (Sandbox Code Playgroud)
由于Data2为NULL,因此不会从T1中删除重复记录1000.
除了在连接中使用魔术值之外,还有其他方法可以比较这些吗?
我知道我应该让顾问重写代码以将所有NULLS插入'',但这是一项艰巨的任务.我也在寻找散列来寻找差异.
尝试使用这个:
SET ANSI_NULLS ON
Run Code Online (Sandbox Code Playgroud)
http://msdn.microsoft.com/en-us/library/aa259229(SQL.80).aspx
编辑
连接“神奇数字”,例如:
ISNULL(T1.Field1, '-9999') = ISNULL(T2.Field2, '-9999')
Run Code Online (Sandbox Code Playgroud)
是您在您的情况下可以做的最好的事情,并且很可能会严重损害查询性能。我想说真正的问题是设计问题,加入 NULL 对我来说很奇怪。