子查询返回的值超过1个子查询时不允许这样做

时间:2016-05-11 06:33:09

标签: sql-server

我使用此查询:

select * 
from Master_Shares 
where (PartnerId = (select distinct PartnerId from Master_Shares ))

这会引发错误:

  

子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

3 个答案:

答案 0 :(得分:3)

您得到的错误消息是不言自明的:子查询

select distinct PartnerId from Master_Shares

返回多个值,因此其结果不是标量,不能与=运算符一起使用。

您必须使用IN运算符:

select * 
from Master_Shares 
where PartnerId IN (select distinct PartnerId from Master_Shares )

P.S。该查询似乎毫无意义,因为它基本上等同于:

select * 
from Master_Shares 

我只是将这篇文章作为使用IN运算符的提示。

答案 1 :(得分:0)

您必须使用IN而不是=,因为您的子查询返回的错误消息显示的值超过1,这意味着您无法在以下内容中使用=

select * 
from Master_Shares 
where (PartnerId IN (select distinct PartnerId from Master_Shares ))

答案 2 :(得分:0)

select distinct PartnerId from Master_Shares

此查询将为您提供Master_Shares表中可用的所有不同PartnerId。

现在,

select * from Master_Shares 
where (PartnerId = (select distinct PartnerId from Master_Shares ))
<\ n>在Where子句中,您使用了'='运算符,它只需要内部查询中的一个值。您的查询仅适用于您的表中只有一个不同的PartnerId的情况,但如果您将拥有多个不同的PartnerId,它将失败。

<强>解决方案: -

  

您可以使用In子句

select * from Master_Shares 
    where PartnerId in (select distinct PartnerId from Master_Shares )

但在你的情况下

select * from Master_Shares 

也会提供与IN查询相同的记录。所以我不明白你为什么要这样做呢?