1

基本的な SQL の質問があります。正しく説明できるように、それらのスキーマを示します。

Sailors(sid:integer,sname:string,rating:integer)(sid は主キーです。)

ここで、クエリは「ホレイショと呼ばれる船員よりも評価が高い船員を見つける」です(sname は主キーではないため、複数のホレイショが存在します)。

答えは:

SELECT *
FROM Sailors S
WHERE S.rating >ANY (SELECT S2.rating
                        FROM Sailors S2
                        WHERE S2.sname="HORATIO")

ANY の代わりに IN を使用できますか? そうでない場合、何が違うのですか?私を助けてくれる人はいますか?前もって感謝します。

4

3 に答える 3

1

INこの場合、(set include) 演算子を使用したくないと思います。適切な評価のセットまたは名前のセットを見つける必要があります。これらのセットの検索条件は、目的の結果の検索条件と同じであるため、わざわざする必要はありません。

, ANY,演算子はSOMEALLSQL 言語の冗長性が高いことを示しています (望ましい機能ではありません)。つまり、多くの構造を使用して常に同じ結果を得ることができます。 , ,を使用する必要はありません。確かに、そして同義語です!ANYSOMEALLANYSOME

ps興味のために、ここに別のアプローチがあります:

SELECT *
  FROM Sailors S
 WHERE S.rating > ( SELECT MIN( S2.rating )
                      FROM Sailors S2
                     WHERE S2.sname = 'HORATIO' );
于 2013-11-07T09:42:27.487 に答える