我使用此查询:
select *
from Master_Shares
where (PartnerId = (select distinct PartnerId from Master_Shares ))
这会引发错误:
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
答案 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查询相同的记录。所以我不明白你为什么要这样做呢?