比較演算子修飾子ALLが期待どおりに機能しないようです。私はMicrosoft SQL Server 2008 R2 Management Studio(v10.50.4000.0)を使用しています。SQL Serverの比較演算子修飾子ALLが機能しません。
declare @AllTest table
(
ID int identity,
Crew int,
Iteration int,
Value varchar(200)
)
insert @AllTest
values
(1, 1, 'a'),
(2, 1, 'b'),
(3, 1, NULL),
(1, 2, 'd'),
(1, 3, 'e'),
(3, 2, NULL),
(2, 2, 'a'),
(2, 3, 'b'),
(1, 4, NULL),
(1, 5, 'f')
select
*
from
@AllTest
where
1 = 1
and Crew = 1
and Value is not NULL
select
*
from
@AllTest
where
1 = 1
and Crew = 1
and Value is not NULL
and Iteration = all(select v from (values (1),(2),(3)) as t(v))
select
*
from
@AllTest
where
1 = 1
and Crew = 1
and Value is not NULL
and Iteration != all(select v from (values (1),(2),(3)) as t(v))
ここで、 'Iteration = all'は結果を返しませんが、それはすべきです。 「Iteration!= all」というクエリは、期待通りに機能します。 (しかし、そのような結果は、 '反復ではない'によって、そして値を提示するためにテーブル値コンストラクタやユニオンのようなものを使用してサブクエリを使用する必要はありません)。すべてが表示されているように動作せず、 '反復=すべて(1,2,3)'または '反復!=すべて(1,2,3)'などの単純な式が無効であることは本当に奇妙なようです。
select
*
from
@AllTest
where
1 = 1
and Crew = 1
and Value is not NULL
and Iteration != all(1,2,3)
これは、私のバージョンのSQL Serverには問題がありますか?何が欠けていますか?
ALLが動作しない場合、ALLを使用して生成する必要がある結果を返すようにクエリを構成する最も良い代替方法は何ですか?
編集: 私は予想される結果に関して私の質問を明確にしていないことをお詫びします。値のNULLとIterationが1に、行数が2と3で行がなくなった行がある場合にのみ結果を返す方法を探しています。
私はそれが理にかなっていると思います。
また、 'Iteration = all'が1行を探しているのを見て、意味的に意味が分かりやすく誤った構文と見なされる 'Iteration in all'を試しました。
あなたは結果は次のようになり期待していた、あなたが代替をしたい場合は、なぜ、私はあなたがのいくつかの並べ替えを望むかもしれないと想像してるかを説明する必要があります関係分割クエリ。 –