消息512,级别16,状态1,行2子查询返回的值超过1。当子查询跟随时,不允许这样做

时间:2014-07-15 09:55:50

标签: sql sql-server

如何解决这种探测对我有帮助。

Select SUM(iamount) 
from cust_installment 
where  c_no=(
    Select b.c_no 
    from a_basic a 
        INNER JOIN cust_personal b ON a.a_code=b.a_code
        INNER JOIN cust_installment c ON b.c_no=c.c_no  
    where c.idate BETWEEN '2014-06-25' AND '2014-06-25')

错误是

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

3 个答案:

答案 0 :(得分:2)

在你的主要where子句中where c_no=( <<SUBQUERY>> )。这里的内部子查询必须返回一个结果,否则where子句没有意义。

因此,要么使用top 1将子查询限制为单个结果,要么修复它,如果逻辑上它应该只返回一个结果。

或者,如果您希望匹配多个结果,请将main where子句更改为where c_no in ( <<SUBQUERY>> )

答案 1 :(得分:1)

您的子查询

Select b.c_no from a_basic a INNER JOIN cust_personal b ON a.a_code=b.a_code INNER JOIN cust_installment c ON b.c_no=c.c_no  where c.idate BETWEEN '2014-06-25' AND '2014-06-25' 

可以返回多个值。

您有几个机会:

  1. 使用从a_basic a INNER JOIN ...
  2. 中选择TOP 1 b.c_no
  3. =替换为in

答案 2 :(得分:1)

试试这个

Select SUM(iamount) 
from cust_installment 
where  c_no in (
    Select b.c_no 
    from a_basic a 
        INNER JOIN cust_personal b ON a.a_code=b.a_code
        INNER JOIN cust_installment c ON b.c_no=c.c_no  
    where c.idate BETWEEN '2014-06-25' AND '2014-06-25')