提问人:Abbi KRK 提问时间:5/30/2023 最后编辑:Abbi KRK 更新时间:5/30/2023 访问量:46
为什么我的 SQL Server 查询在面向特定 WHERE 子句 [duplicate] 时返回空记录
Why is my SQL Server Query return empty record when targeting specific WHERE clause [duplicate]
问:
我正在使用一些像这样的简单左连接查询
SELECT
A.ACCTNO
,[ID_Name]
,[ID1]
,[ID2]
,[ID3]
,[ID4]
, A.Value as Value1
, B.Value AS Value2 FROM TABLE_A A
LEFT JOIN TABLE_B B
ON A.ID_Name = B.ID_Name
AND A.[ID1] = B.[ID1]
AND A.[ID2] = B.[ID2]
AND A.[ID3] = B.[ID3]
AND A.[ID4] = B.[ID4]
令我惊讶的是,一些 Value2 返回 NULL 值。这应该是不可能的,因为并且应该具有相同的确切 ID,唯一不同的是 Value。TABLE_A
TABLE_B
在我做了一些采样之后,我在运行这个查询时发现了这一点
select * from TABLE_B
where ID_Name = 13
AND ID1 = 2
AND ID2 = 3
AND ID3 = 3
AND ID4 = NULL
它返回空记录,但是当我省略时,它返回一条记录,这是我期望的记录:ID4
ID_Name | HDP系列 | 高原 | 高动态范围 | HDU型 | 价值 |
---|---|---|---|---|---|
13 | 2 | 3 | 2 | 零 | 100 |
所以我的问题是,是什么触发了这一点。为什么如果我包含,它会返回空记录,如果我离开它,它会返回我想要的输出,我该如何避免它?ID4
笔记:
- 只有 13 个具有 NULL 的 ,其他 的 值为 ,因此无法排除 WHERE 子句
ID_Name
ID4
ID_Name
ID4
ID4
- 不确定是否相关,但我为 varchar(255) 制作了数据类型,以防它检测为文本,因为我使用“import”来填充表,而不是使用查询
ID4
NULL
ID4
在源平面文件上保留为 ,而不是BLANK
NULL
表结构:
TABLE_A
ID_Name | HDP系列 | 高原 | 高动态范围 | HDU型 | 价值 |
---|---|---|---|---|---|
13 | 2 | 3 | 2 | 零 | 50 |
8 | 1 | 1 | 1 | 1 | 50 |
TABLE_B
ID_Name | HDP系列 | 高原 | 高动态范围 | HDU型 | 价值 |
---|---|---|---|---|---|
13 | 2 | 3 | 2 | 零 | 100 |
8 | 1 | 1 | 1 | 1 | 150 |
期望输出 :
ID_Name | HDP系列 | 高原 | 高动态范围 | HDU型 | 值1 | 值2 |
---|---|---|---|---|---|---|
13 | 2 | 3 | 2 | 零 | 50 | 100 |
8 | 1 | 1 | 1 | 1 | 50 | 150 |
电流输出 :
ID_Name | HDP系列 | 高原 | 高动态范围 | HDU型 | 值1 | 值2 |
---|---|---|---|---|---|---|
13 | 2 | 3 | 2 | 零 | 50 | 零 |
8 | 1 | 1 | 1 | 1 | 50 | 150 |
答: 暂无答案
评论
LEFT JOIN ... ON A.ID_Name = B.ID_Name ...
ID4 = NULL
在 where 子句中不正确,您正在寻找ID4 IS NULL
NULL == NULL