2

sids全力で最高評価で探したい。

max私は書くことによってコマンドでそれを見つけます

select S.sid,S.sname 
from Sailors S 
where S.rating = (select max(S1.rating) from Sailors S1)

しかし、コマンドを使用して検索したいallので、次のように記述します

select S.sid,S.sname 
from Sailors S 
where  S.rating > all (select S.rating from Sailors S)

しかし、同じ結果は得られません。

私のエラーは何ですか?どうすれば規制できますか?

4

2 に答える 2

6

クエリを次のように変更するだけです。

select S.sid,S.sname 
from Sailors S 
where  S.rating >= all (select S.rating from Sailors S)

マフムードは現在の条件の何が問題なのかについて部分的に正しいですがMAX、セット内の各要素はそれ自体よりも大きいか等しい必要があるため、等しい可能性を追加すると、クエリと同じ動作が得られます。(どの要素もそれ自体より大きくなり得ないというマフムードの指摘は正確です。)

Mahmoud が親切に提供してくれたこの SQLfiddleを参照してください。

ypercube がコメントで指摘しているように、列の値が NULL の場合、このメソッドは機能しません。WHERE rating IS NOT NULL、またはNOT NULL列を指定するようにサブクエリを変更しても、問題なく動作するはずです。

于 2012-11-11T09:17:26.173 に答える
2

SQL-Server では、仕様ORDER BYと組み合わせて使用​​することもできます。TOP (1)WITH TIES

SELECT TOP (1) WITH TIES
    S.sid, S.sname 
FROM Sailors S 
ORDER BY S.rating DESC ;
于 2012-11-11T09:36:25.823 に答える