我有这个非常简单的目标,但我想不出任何简单的解决方案。我有一个值列表将来自用户输入,我想检查数据库中是否至少有一个值。请注意,输入的值可能有重复。
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是表中不存在的唯一值。
答案 0 :(得分:1)
我认为你的方法有效:
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
IS 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 |
答案 1 :(得分:1)
我不是在我的Pc面前,而是像:
Select id from mytable where (
Select count(id)
From myTable
where id in (1,2,4)
Group by id) =0
可能会工作