‘where name not in’基于先前查询的结果

问题描述 投票:0回答:1

我正在尝试根据 WHERE-IN 列表收集两个相反的列表。抱歉,如果该术语不正确,但至少在帖子中保持一致。

WHERE name IN ('name1')

我有一个 select 语句,它可以使用 WHERE-IN 告诉数据库中是否列出了某个名称。

-- working
SELECT name FROM name_list
WHERE name IN ('name1','name2','name3','name4')

这个结果只告诉我来自 name_list 中的 WHERE-IN 列表的名称,这是我想要的前半部分。

接下来,我想查看 WHERE-IN 列表中的哪些名称不在 name_list 中。我尝试使用 WHERE-NOT IN,但这给了我 name_list 中不在我的 WHERE-IN 列表中的所有名称。

-- NOT working
SELECT name FROM name_list
WHERE name NOT IN ('name1','name2','name3','name4')

我知道一些 ssms 基础知识,但我过去处理过的所有搜索都是查看数据库表中项目的结果,而我现在正在寻找表中没有的结果。任何帮助将不胜感激。

所需输出的示例是:

search result 1 (name found)
name1
name2
name4

search result 2 (name not found)
name3
sql sql-server where-in
1个回答
1
投票

创建一个临时表,并从 csv 文件或使用下面的 Insert 语句在表中插入名称:

INSERT INTO temp_name_list (name) VALUES ('name1');
.
.
INSERT INTO temp_name_list (name) VALUES ('nameN');

并使用以下查询来获取结果:

select temp_nl.name 
From temp_name_list temp_nl
LEFT JOIN name_list nl 
on temp_nl.name=nl.name 
WHERE nl.name IS NULL;
© www.soinside.com 2019 - 2024. All rights reserved.