gpt4 book ai didi

SQL Server 哪里 [列] <>

转载 作者:行者123 更新时间:2023-12-04 21:03:07 27 4
gpt4 key购买 nike

这可能有些愚蠢,所以我会提前道歉。

假设我有两个表:

|    TABLE 1    |    |      TABLE 2      |
----------------- ---------------------
|RESULT | REASON| |ID | DESCRIPTION|
----------------- ---------------------
| 1 | NULL | | A | NO INTEREST|
| 2 | A | | B | CALL CLOSED|
| 2 | B | | C | DECEASED |
| 1 | NULL | ---------------------
-----------------

因此,REASON 只有在 RESULT 为 2 时才有值。否则为 NULL

现在假设我运行以下命令:

SELECT
t1.RESULT, t2.DESCRIPTION
FROM
[TABLE 1] t1 LEFT OUTER JOIN
[TABLE 2] t2 ON t1.RESULT = t2.ID

我们会得到以下信息:

------------------------
| RESULT | DESCRIPTION |
------------------------
| 1 | NULL |
| 2 | NO INTEREST |
| 2 | CALL CLOSED |
| 1 | NULL |
------------------------

现在我发现,如果我再添加一个 WHERE 子句,如下所示:

SELECT
t1.RESULT, t2.DESCRIPTION
FROM
[TABLE 1] t1 LEFT OUTER JOIN
[TABLE 2] t2 ON t1.RESULT = t2.ID
WHERE
t2.DESCRIPTION <> 'CALL CLOSED'

出于某种原因,我得到了以下结果:

------------------------
| RESULT | DESCRIPTION |
------------------------
| 2 | NO INTEREST |
------------------------

添加 where 子句似乎会排除所有结果为 1 ergo 的记录,即所有具有 NULL 原因值/描述值的记录。

我是不是漏掉了什么蠢东西?

最佳答案

在 SQL 中,NULL不是“空值”或类似的东西,它是缺少值 - 任何需要值的操作都将返回未知。由于 unknown 不为真,因此在 where 中为返回 unknown 的条件评估的每一行查询中不会返回子句。

使用 <> 考虑您的情况运算符询问“描述的值是否不同于‘CALL CLOSED’”——答案是否定的,因为它根本没有值。

一旦我们确定了这一点,处理起来就很简单 - 只需检查 NULL明确地:

SELECT
t1.RESULT, t2.DESCRIPTION
FROM
[TABLE 1] t1 LEFT OUTER JOIN
[TABLE 2] t2 ON t1.RESULT = t2.ID
WHERE
t2.DESCRIPTION IS NULL OR t2.DESCRIPTION <> 'CALL CLOSED'

关于SQL Server 哪里 [列] <>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21384307/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com