检查SQL Server中是否存在值

我有这个非常简单的目标,但我想不出任何简单的解决方案.我有一个值列表将来自用户输入,我想检查数据库中是否至少有一个值.请注意,输入的值可能有重复项.

myTable的:

| id | name |
| 0  | Bob  |
| 1  | Ben  |
| 2  | John |
| 3  | Rex  |

用户输入的示例值:

1,2,2,4

计数不存在的值,在本例中为4,所以:

1

我可以这样做:

select count(userInput.value)
from
   (select 1 as value
    union all
    select 2
    union all
    select 2
    union all
    select 4) as userInput
left join myTable
on myTable.value = myTable.id
where myTable.id is null

上面的代码将从myTable中计算所有不匹配的值(myTable.id为null).这将工作,但我正在寻找一个不需要使用许多联合的简单解决方案.有人试过那样做吗?

编辑

这不起作用!

select count(myTable.id)
from myTable
where myTable.id not in(1,2,2,4)

上面的代码将计算输入值中不存在的ID,这将导致2,因为输入值中不存在ID 0和3.请注意,预期输出为1,因为值4是表中不存在的唯一值.

最佳答案 我认为你的方法有效:

SELECT * 
FROM
  (SELECT 1 value
   UNION ALL
   SELECT 2
   UNION ALL
   SELECT 2
   UNION ALL
   SELECT 4) ui
LEFT JOIN myTable mt
  ON mt.id = ui.value

返回

| VALUE |     ID |   NAME |
---------------------------
|     1 |      1 |    Ben |
|     2 |      2 |   John |
|     2 |      2 |   John |
|     4 | (null) | (null) |

所以,问一下id为NULL的计数:

SELECT COUNT(*) cnt
FROM
  (SELECT 1 value
   UNION ALL
   SELECT 2
   UNION ALL
   SELECT 2
   UNION ALL
   SELECT 4) ui
LEFT JOIN myTable mt
  ON mt.id = ui.value
WHERE mt.id IS NULL

结果

| CNT |
-------
|   1 |

See the demo

点赞