如何让SQL在结果中显示不匹配的条件?

如何让SQL在结果中显示不匹配的条件?,sql,sql-server,Sql,Sql Server,我有一个拥有数千名客户的数据库。它们都有唯一的客户ID 从另一个不同的系统中,我收到了一份客户ID列表,我想知道哪些ID在我的数据库中找不到 我当前的查询是这样的 select ID from table where ID in ('A1', 'A2', 'A3', ... 'A6499', 'A6500') 从搜索条件中,如何将不匹配的搜索值放入结果集中? 我知道如果搜索条件数据已经存在于同一个数据库中,我会怎么做。除了制作一个临时表并与之连接,还有其他选择吗 我的数据库将包含比A6500更

我有一个拥有数千名客户的数据库。它们都有唯一的客户ID

从另一个不同的系统中,我收到了一份客户ID列表,我想知道哪些ID在我的数据库中找不到

我当前的查询是这样的

select ID
from table
where ID in ('A1', 'A2', 'A3', ... 'A6499', 'A6500')
从搜索条件中,如何将不匹配的搜索值放入结果集中? 我知道如果搜索条件数据已经存在于同一个数据库中,我会怎么做。除了制作一个临时表并与之连接,还有其他选择吗


我的数据库将包含比A6500更多的值,例如A7500。我不想在结果集中获取此值。

使用显式
,可以写入1000多个值,这是
中的
限制

;WITH OtherDatabaseIDs AS
(
    SELECT
        V.*
    FROM
        (VALUES 
         (1000),
         --... as many records as you want
         (2500)) V(OtherDatabaseID)
)
SELECT
    *
FROM
    OtherDatabaseIDs AS T
WHERE
    NOT EXISTS (SELECT 1 FROM table AS O WHERE T.OtherDatabaseID = O.ID)

使用显式
,可以写入1000多个值,这是
中的

;WITH OtherDatabaseIDs AS
(
    SELECT
        V.*
    FROM
        (VALUES 
         (1000),
         --... as many records as you want
         (2500)) V(OtherDatabaseID)
)
SELECT
    *
FROM
    OtherDatabaseIDs AS T
WHERE
    NOT EXISTS (SELECT 1 FROM table AS O WHERE T.OtherDatabaseID = O.ID)
您可以使用:

或者,如果您将ID作为逗号分隔的字符串使用(2016+),或者对于较低版本,使用字符串拆分udf-我建议Jeff Moden:

您可以使用:

或者,如果您将ID作为逗号分隔的字符串使用(2016+),或者对于较低版本,使用字符串拆分udf-我建议Jeff Moden:


可能像不在中一样简单?这将从我的数据库返回不匹配的ID。但我想从搜索条件中知道哪些不匹配。例如,我的数据库可能包含ID“A7500”,我不想在结果中得到它。嗯……你的问题太模糊了,我只能猜测。也许简单到不在?这将从我的数据库返回不匹配的ID。但我想从搜索条件中知道哪些不匹配。例如,我的数据库可能包含ID“A7500”,我不想在结果中得到它。嗯……你的问题太模糊了,我只能猜测。谢谢!这正是我要找的,但找不到方法。谢谢!这正是我要找的,但是找不到方法。也谢谢你的帮助!也谢谢你的有益评论!
SELECT value
FROM STRING_SPLIT('A1,A2,A3', ',') AS t  
LEFT JOIN table ON t.value = table.ID
WHERE table.ID IS NULL