web-dev-qa-db-ja.com

where 1条件を使用しているときにSQLクエリが同じ値を返す

一時テーブルを作成し、以下のように値を挿入しました。

create table #temp( val int );

insert into #temp values(333);
insert into #temp values(222);
insert into #temp values(111);

以下のselectステートメントをクエリすると、答えは333でした。

Select * 
from #temp a 
Where 1 =(
    Select COUNT(VAL) 
    from #temp b 
    where a.val <= b.val
);

結果:

val

333

SQLサーバーがどのようにしてこのソリューションを実現したかを教えてください。

4
l.lijith

クエリを次のように書き換えます。

SELECT a.*, x.cnt
FROM #temp a
CROSS APPLY (
    SELECT COUNT(VAL) AS cnt
    FROM #temp b
    WHERE a.val <= b.val
) x
--WHERE x.cnt = 1

Where句のコメントを外すと、333 | 1 結果として。重複またはより大きな値を持たない外部テーブルの行をリクエストします。

6
Denis Rubashkin