子查询返回多个值如何解决?

时间:2017-12-26 06:43:23

标签: mysql sql sql-server

SELECT 
      outctc.year, 
      outctc.ctc, 
      outctc.gross, 
      (SELECT 
          (case when (COUNT(EMP_ID)>=1)then inrctc.ctc else outctc.ctc end)

      FROM 
          employee_ctc inrctc 
      WHERE 
          inrctc.EMP_ID = outctc.EMP_ID 
      GROUP BY 
          inrctc.ctc,inrctc.EMP_ID)  

FROM employee_ctc outctc  
WHERE outctc.EMP_ID=100002

错误:

  

子查询返回的值超过1。这是不允许的   子查询跟随=,!=,<,< =,>,> =或当子查询用作   表达。

1 个答案:

答案 0 :(得分:1)

当您在select中使用子查询时,预计只返回1个单行和一列。因此,如果您认为可能有多个行或列,并且您需要它们,那么您最好使用CTE或在连接或部分中使用子查询。

甚至你可以通过在选择中放置前1来简单地克服错误。

这里你得到错误,因为在Group BY部分,你给了2列,但在连接部分,只有一列。因此,在您的表employee_ctc中,可能有多个EMP_ID 100002

的记录

您可以将剩余的列( inrctc.ctc )添加到联接中,也可以将其从组中删除

这可能对您有用:

select 
outctc.year,
outctc.ctc,
outctc.gross,
CASE WHEN Q.ctc IS NOT NULL
    THEN Q.ctc else outctc.ctc end
from employee_ctc outctc  
    OUTER APPLY
    (
        select 
            CTC = SUM(inrctc.ctc)
        from employee_ctc inrctc 
            where inrctc.EMP_ID=outctc.EMP_ID 
    )Q  
where outctc.EMP_ID=100002