为什么选择不起作用

时间:2012-09-12 14:08:02

标签: sql sql-server

我正在尝试学习sql而且我得到了这个错误 - 这意味着什么?。

我想:让国内生产总值高于欧洲任何国家的国家?

错误:

  

[Microsoft] [ODBC SQL Server驱动程序] [SQL Server]子查询返回更多   比1值。当子查询跟随=,!=时,不允许这样做,   &lt ;,< =,>,> =或者当子查询用作表达式时。   (SQL-21000)

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

7 个答案:

答案 0 :(得分:3)

这意味着查询select gdp from bbc where region = 'Europe'返回的行数超过1行,where gpd >条件无法与多个值进行比较。您需要将查询更新为仅返回1行。

答案 1 :(得分:1)

错误的原因是您的子查询返回多个值。

根据您的要求,如果您需要gdp大于欧洲GDP的 EACH ,则应使用此查询:

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

或者这个,如果你需要gdp大于欧洲GDP的至少(差异只是{{1} } vs MIN):

MAX

答案 2 :(得分:1)

运行查询的这一部分

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

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

答案 3 :(得分: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')

答案 4 :(得分:1)

该消息充分描述了错误:您的表在欧洲有许多国家/地区,因此如果子查询中没有一些聚合或更多约束,则无法应用>运算符:

select name, gdp from bbc 

where gdp > 

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

)

添加max可确保选择一个数字,并且该数字是所有欧洲国家 1 中的最高GDP。

<小时/> 1 你不妨马上选择德国的GDP:)

答案 5 :(得分:1)

清除学术问题的好地方ANY operator

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

“...大于任何欧洲国家......”。就像回答一样。

答案 6 :(得分:0)

当内部查询返回多于1个值时,会发生此错误。尝试:

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