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