我有一个值列表,比如说1,2,3,4,5,6
。我有一个 SQL 表,其中有一个存储这些值的字段,但只有三行,比如2,4,5
. 什么样的查询将为我返回三行1,3,6
?(将所有六个存储在另一个表中并左加入是作弊。)
问问题
12614 次
5 回答
7
您没有说明您的 DBMS,所以这是 ANSI SQL 版本:
with the_values (id) as (
values (1),(2),(3),(4),(5),(6)
)
select v.id
from the_values v
left join the_real_table t on t.id = v.id
where t.id is null;
于 2012-07-16T19:16:58.953 回答
4
您也可以尝试使用 EXCEPT(类似于 Oracle 中的 MINUS):
(SELECT 1
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
UNION
SELECT 6)
EXCEPT
(SELECT 2
UNION
SELECT 3
UNION
SELECT 4)
或者,与您的示例更相关:
(SELECT 1
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
UNION
SELECT 6)
EXCEPT
(SELECT Field FROM Table)
其中 Field 包含 2、4 和 5。
于 2012-07-16T19:39:44.347 回答
1
操作员将not in
进行您想要的检查。
declare @allValues table (value int)
insert @allValues values (1)
insert @allValues values (2)
insert @allValues values (3)
insert @allValues values (4)
insert @allValues values (5)
insert @allValues values (6)
declare @someValues table (value int)
insert @someValues values (2)
insert @someValues values (4)
insert @someValues values (5)
select
*
from
@allValues
where
value not in (select value from @someValues)
另一种可能更快的方法,使用连接:
select
av.value
from
@allValues av
left join @someValues sv on (av.value = sv.value)
where
sv.value is null
于 2012-07-16T19:15:48.943 回答
0
如果它完成了工作,这不是作弊。设置一个包含所有可能行的临时表或表变量,然后使用 WHERE NOT EXISTS 或 LEFT OUTER JOIN 结合 WHERE TableVariableID IS NULL。
于 2012-07-16T19:16:28.957 回答
-3
你可以使用一个NOT IN
子句。
SELECT column FROM table WHERE column NOT IN (2,4,5)
于 2012-07-16T19:15:39.437 回答