【发布时间】:2020-07-02 02:21:23
【问题描述】:
我有以下查询,我打算过滤/排除WHERE 范围类型或市场概念等于字符串文字“PLACEHOLDER”。由于反馈,我们发现我们实际上也排除了这些字段为NULL 的任何实例。这让我有些意外,有什么建议可以解释一下吗?
查询:
SELECT DISTINCT M.MATERIAL,
A.MARKET_CONCEPT,
A.RANGE_TYPE
FROM VW_MRP_ALLOCATION_COMBINED M
JOIN VW_ARTICLE_ATTRIBUTES_COMBINED A ON M.Material = A.Article AND M.SALES_ORGANIZATION = A.SALES_ORGANIZATION
WHERE M.stock_type = ''
AND A.market_concept <> 'PLACEHOLDER'
AND A.RANGE_TYPE <> 'PLACEHOLDER'
AND A.Article in ('BK0348',
'BQ2718',
'BQ2719',
'BS3674',
'CF3607',
'CF3608',
'CF3609',
'CF3610',
'CV5091',
'D94751',
'DH6911',
'DT5039')
AND M.Sales_Organization = 6040;
【问题讨论】:
-
NULL 是没有值,它们不是空字符串。如果你想包含一个空值,你可以使用 {somevalue} IS NULL
-
根据定义
null是一个未知值,因此不能相等或不相等。如果要包含空值,则需要特别包含它们,例如(A.market_concept <> 'PLACEHOLDER' OR A.market_concept is null) -
这敲响了一些钟声。如果我将条件更改为“喜欢”而不是直接等于或不等于会发生什么?这似乎仍然不起作用
-
同样的交易......你可以做
coalesce(A.market_concept,'') <> 'PLACEHOLDER',但它不会像我上面给出的解决方案那样好,因为你在比较之前对值使用了一个函数。 -
同样的事情,
NULL <any-comparison-operator> <any-value>总是FALSE
标签: sql sql-server null