如何基于指定WHERE IN列表获取数据库表中存在/不存在的名称
解决方案
1. 查询列表中存在于name_list的名称
你原有的语句本身可以正常使用,也可以用关联写法实现相同效果:
SELECT t.name FROM (VALUES ('name1'), ('name2'), ('name3'), ('name4')) AS t(name) JOIN name_list nl ON t.name = nl.name;
2. 查询列表中不存在于name_list的名称
核心是先把你指定的名称列表转换成临时数据集,再通过左关联筛选出表中无匹配的项:
SELECT t.name FROM (VALUES ('name1'), ('name2'), ('name3'), ('name4')) AS t(name) LEFT JOIN name_list nl ON t.name = nl.name WHERE nl.name IS NULL;
执行结果示例
第一条语句输出:
search result 1 (name found) name1 name2 name4
第二条语句输出:
search result 2 (name not found) name3
如果你的数据库不支持VALUES子句,可改用UNION ALL构造临时列表,替换上述语句中的(VALUES ...)部分即可:
SELECT 'name1' AS name UNION ALL SELECT 'name2' UNION ALL SELECT 'name3' UNION ALL SELECT 'name4'
内容的提问来源于stack exchange,提问作者Kurt Schwob
相关产品推荐
相关产品推荐

