3

このクエリを実行しようとしています

    SELECT        Name, Position, Salary
FROM            Employee
WHERE        (Salary =
                             (SELECT        MAX(Salary)
                               FROM            Employee))

ただし、実行するたびに次のエラーが発生します

エラー ソース: SQL Server Compact ADO.NET データ プロバイダー
エラー メッセージ: クエリの解析中にエラーが発生しました。[トークン行番号 = 1、トークン行オフセット = 69、エラーのトークン = SELECT]

サブクエリがどのように機能するかを理解していないのではないかと思っていますが、私のチューターは、実行しようとしているステートメントが正しいことを保証してくれます。

4

2 に答える 2

3

これは SQL Server で機能するはずです。

SELECT Name, Position, Salary
FROM Employee E
   JOIN ( SELECT Max(Salary) as Sal FROM Employee ) M  ON E.Salary = M.Sal

これがSQL Fiddleです。

- 編集

ネストされたサブクエリを完全にはサポートしていない SQL Server CE を使用しているようです。INキーワードを使用する代わりに、次のようなことを試してください。

SELECT e.Name, e.Position, e.Salary
FROM Employee e
WHERE e.Salary IN (SELECT MAX(Salary) as sal 
                   FROM Employee)
于 2013-01-15T17:27:02.523 に答える
1

コンパクト エディションには明らかにいくつかの制限があります。これを試すことができます:

SELECT e.Name, e.Position, e.Salary
FROM Employee e
  LEFT JOIN Employee s
    ON s.Salary > e.Salary
WHERE s.Salary IS NULL ;

この:

SELECT e.Name, e.Position, e.Salary
FROM Employee e
WHERE NOT EXISTS
      ( SELECT *
        FROM Employee s
        WHERE s.Salary > e.Salary
      ) ;

この:

SELECT e.Name, e.Position, e.Salary
FROM Employee e
WHERE e.Salary IN 
      ( SELECT MAX(s.Salary)
        FROM Employee s
      ) ;

GROUP BYそしてこれ(おそらくCEはサブクエリ/派生テーブル、またはテーブル全体でのグループ化を許可していません):

SELECT e.Name, e.Position, e.Salary
FROM Employee e
WHERE e.Salary = 
      ( SELECT TOP (1) s.Salary
        FROM Employee s
        ORDER BY s.Salary DESC
      ) ;
于 2013-01-15T17:44:09.973 に答える