1

我正在尝试学习 sql,但出现此错误 - 这是什么意思?

我正在尝试:获得 GDP 比欧洲任何国家都高的国家?

错误:

[Microsoft][ODBC SQL Server Driver][SQL Server]子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。(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'返回多于 1 行,并且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大于欧洲的国内生产总值的至少一个(差异只是MINvs MAX):

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

运行这部分查询

从 bbc 中选择 gdp,其中 region = 'Europe'

如果它返回超过 1 行,它将失败。您需要在 where 子句中更具选择性。

于 2012-09-12T14:09:49.510 回答
1

您可以尝试使用一个值 - 基于Min , Max or TOP 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你不妨马上选择德国的GDP :)

于 2012-09-12T14:10:17.097 回答
1

为学术任何操作员除尘的好地方!

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

“……比欧洲任何国家都大……”。就像回答一样。

于 2012-09-12T14:11:13.830 回答
0

当内部查询返回超过 1 个值时会发生这种情况。尝试:

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