2014-07-15 29 views
1

如何解決這種探針幫助我。消息512,級別16,狀態1,行2子查詢返回多個值。這是不允許的,當子查詢遵循

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') 

誤差是

消息512,級別16,狀態1,行2 子查詢返回大於1倍的值。當子查詢遵循=,!=,<,< =,>,> =或當子查詢用作表達式時,這是不允許的。

+0

它是在MSSQL,MySQL或其他上下文?當您返回多個值時,您希望使用哪個子查詢的結果? – schlonzo

+0

@ schlonzo:這是SQL SERVER。 – Datta

+0

你可以使用'(從a_basic中選擇TOP 1 b.c_no一個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')'你的子查詢,但我不知道這是否是想要的結果。 – schlonzo

回答

2

在你的主要where子句中有where c_no=(<<SUBQUERY>>)。這裏的內部子查詢必須返回一個結果,否則where子句沒有意義。

因此,要麼通過使用top 1限制子查詢爲單個結果,要麼通過修復它,如果在邏輯上它應該只返回單個結果。

或者,如果你希望匹配多個結果,更改主where子句where c_no in (<<SUBQUERY>>)

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. 使用SELECT TOP 1從a_basic一個INNER JOIN b.c_no ...
  2. 更換=in
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') 
相關問題