检查SQL Server中是否存在值

时间:2013-03-11 01:50:16

标签: sql sql-server-2005

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

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是表中不存在的唯一值。

2 个答案:

答案 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 |

See the demo

答案 1 :(得分:1)

我不是在我的Pc面前,而是像:

Select id from mytable where (
Select count(id) 
From myTable
where id in (1,2,4) 
Group by id) =0

可能会工作