首页 > 解决方案 > 如果列表中的任何值在 SQL 表中不存在,则返回错误

问题描述

我有一张像下面这样的桌子。

员工表

我想使用 IN 子句在选择查询中传递值列表。例如

SELECT * FROM Employee WHERE EmployeeName IN ('Tim','Bob','Jim') 

如果表中不存在值列表​​中的任何记录,是否有办法修改查询以返回错误。

例如

案例 1:如果查询的输入是('Tim','Bob','Jim'),它应该返回错误,因为 Jim 不存在于表中。

情况 2:如果查询的输入是('Tim','Bob')它不应该返回错误,因为列表中的所有条目都存在于 DB 表中。

情况 3:如果查询的输入是('Tim','Bob','Rick','Sam','Gary')则不应返回错误。

简而言之,如果输入列表中的任何值在表中不存在,我想返回一个错误。

我想知道这是否可行,如果可行,这是一个好习惯。我们正在使用 SQL SERVER 2014。

标签: sql-serverselectsql-server-2014

解决方案


您可以将连接留employee在列表中并检查NULLie 中未找到匹配的行employeeEXISTS在外部查询中使用该结果。

SELECT <your value>
       WHERE EXISTS (SELECT *
                            FROM (VALUES ('Tim'),
                                         ('Bob'),
                                         ('Jim')) v (name)
                                 LEFT JOIN employee e
                                           ON e.employeename = v.name
                            WHERE e.employeename IS NULL);

推荐阅读