5

値のリストがあります1,2,3,4,5,6。これらの値を格納するフィールドを持つSQLテーブルがありますが、たとえば、3行しかありません2,4,5。どのような種類のクエリが3行1,3,6を返しますか?(6つすべてを別のテーブルに格納し、左結合を行うのは不正行為です。)

4

5 に答える 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 に答える