1

SQL を学習しようとしているのですが、このエラーが表示されます。これはどういう意味ですか?

私はしようとしています: ヨーロッパのどの国よりも GDP が大きい国を取得しますか?

エラー:

[Microsoft][ODBC SQL Server ドライバー][SQL Server]サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。(SQL-21000)

select name, gdp from bbc 
where gdp > 
(
    select gdp from bbc
    where region = 'Europe'
)
4

7 に答える 7

3

これは、クエリselect gdp from bbc where region = 'Europe'が複数の行を返し、where gpd >条件が複数の値と比較できないことを意味します。1 行のみを返すようにクエリを更新する必要があります。

于 2012-09-12T14:09:27.203 に答える
1

エラーの理由は、サブクエリが複数の値を返すことです。

要件に応じて、ヨーロッパの各 GDPよりgdpも大きくする必要がある場合は、次のクエリを使用する必要があります。

SELECT
  name,
  gdp
FROM
  bbc 
WHERE gdp > 
  (
    SELECT
      MAX(gdp)
    FROM
      bbc
    WHERE
      region = 'Europe'
  )

または、これは、ヨーロッパの GDP の少なくとも 1 つを超える必要がある場合 (違いはvsgdpだけです) :MINMAX

SELECT
  name,
  gdp
FROM
  bbc 
WHERE gdp > 
  (
    SELECT
      MIN(gdp)
    FROM
      bbc
    WHERE
      region = 'Europe'
  )
于 2012-09-12T14:09:17.923 に答える
1

クエリのこの部分を実行します

地域 = 'ヨーロッパ' の BBC から gdp を選択

複数の行を返す場合、失敗します。where 句をより選択する必要があります。

于 2012-09-12T14:09:49.510 に答える
1

に基づいて、1つの値で試すことができますMin , Max or TOP 1

注: 1 つの値をコレクションと比較することはできません。

select name, gdp from bbc 

where gdp > 

(select TTOP(1) gdp from bbc where region = 'Europe')

または

 select name, gdp from bbc 

    where gdp > 

    (select Max(gdp) from bbc where region = 'Europe')
于 2012-09-12T14:09:59.147 に答える
1

メッセージはエラーを適切に説明しています: テーブルにはヨーロッパに多くの国があるため>、サブクエリでいくつかの集計またはより多くの制約がないと演算子を適用できません:

select name, gdp from bbc 

where gdp > 

(
select max(gdp) from bbc
where region = 'Europe'

)

追加maxすると、正確に 1 つの数字が選択され、その数字がすべてのヨーロッパ諸国の中で最も高い GDP になることが保証されます1


1ドイツの GDP をすぐに選択することもできます :)

于 2012-09-12T14:10:17.097 に答える
1

アカデミックなANY オペレーターのほこりを払うのに最適な場所です。

select name, gdp from bbc 
where gdp > ANY
(
select gdp from bbc
where region = 'Europe'
)

「...ヨーロッパのどの国よりも大きい...」. 答えのように。

于 2012-09-12T14:11:13.830 に答える
0

内部クエリが複数の値を返す場合に発生します。試す:

select name, gdp from bbc where gdp > (select TOP 1 gdp from bbc where region = 'Europe')
于 2012-09-12T14:09:22.507 に答える