返回 SQL 中返回空值的行?显示它们不是空白值

问题描述

select *
from dataentry with (nolock)
where clientnumber in (
'00602','00897','00940'
)

所以背景是 clientnumber 是客户端发送给我的值,并将插入到数据库中。但是上面的 3 个数字还没有被我插入到数据库中,所以当我在数据库搜索它们时它会变成空白。 sql 有没有办法将这些数字显示为空值?

也许要做到这一点是使用 not IN 和我已经插入的客户号码?但是假设我插入了 2000 个数字,这将是非常低效的。这样做的最佳方法是什么?

解决方法

您可以保留连接到包含“数字”的派生表(实际上,字符串具有可能的数字表示)。

SELECT d.clientnumber
       FROM (VALUES ('00602'),('00897'),('00940')) AS n
                                  (n)
            LEFT JOIN dataentry AS de
                      ON de.clientnumber = n.n;

这将为您提供与列表中不存在于表中的“数字”一样多的 NULL 以及表中的任何“数字”,即它在其中出现的次数。

或者,更实际的用途是使用 NOT EXISTS 来获取不在表中的“数字”(还没有)。

SELECT n.n AS clientnumber
       FROM (VALUES ('00602'),('00940')) AS n
                                  (n)
       WHERE NOT EXISTS (SELECT *
                                FROM dataentry AS de
                                WHERE de.clientnumber = n.n);

甚至是它们是否存在的指示器。

SELECT n.n AS clientnumber,CASE
         WHEN EXISTS (SELECT *
                             FROM dataentry AS de
                             WHERE de.clientnumber = n.n) THEN
           'true'
         ELSE
           'false'
       END existence
       FROM (VALUES ('00602'),('00940')) AS n
                                  (n);