値のリストがあります1,2,3,4,5,6
。これらの値を格納するフィールドを持つSQLテーブルがありますが、たとえば、3行しかありません2,4,5
。どのような種類のクエリが3行1,3,6
を返しますか?(6つすべてを別のテーブルに格納し、左結合を行うのは不正行為です。)
質問する
12614 次
5 に答える
7
あなたはDBMSを述べていなかったので、これはANSISQLバージョンです。
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
それが仕事をするならば、それはだまされていません。可能なすべての行を使用して一時テーブルまたはテーブル変数を設定してから、WHERENOTEXISTSまたはLEFTOUTERJOINをWHERETableVariableIDISNULLと組み合わせて使用します。
于 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 に答える