子查询返回的值超过1。子查询遵循=,!=,<,< =,>,> =或者不允许这样做

时间:2017-02-21 17:02:56

标签: sql sql-server sql-server-2008

我收到错误

  

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

执行此SQL命令时

select * 
from Person p 
where p.reference_no like (select referencenumber from Reference)

我的Reference表格中有一列referencenumber,如下所示

enter image description here

4 个答案:

答案 0 :(得分:1)

您可以像这样使用exists()

select * 
from Person p 
where exists (
  select 1
  from Reference r
  where p.reference_no like r.referencenumber 
  )

另外,为什么使用like代替=?如果你想进行部分比较,不应该是like '%'+r.referencenumber+'%'

答案 1 :(得分:0)

尝试不同的东西

select * from Person p where 
           EXISTS  
             (select r.referencenumber from Reference r 
                      WHERE p.reference_no like r.referencenumber )

答案 2 :(得分:0)

您可以根据条件使用联接

select p.* 
from Person p 
inner join Reference r on p.reference_no like (r.referencenumber )

或者(因为您不使用wildchar)可以在

中使用
select * f
rom Person p 
where p.reference_no in  (select referencenumber from Reference)

答案 3 :(得分:0)

您可以使用exists执行此查询:

select p.*
from Person p
where exists (select 1
              from Reference r
              where p.reference_no like r.referencenumber
             );

但是,如果您不使用通配符,则in就足够了。