SQL内联接用的情况

时间:2016-09-14 13:16:54

标签: sql

我需要帮助来管理一个查询才能成为功能。 需要传递一些内连接,然后在那之后比较一些值,并根据它来更新状态和正确的字母。

update t_carton_box 
set status =  (select * 
                from t_entries e 
                inner join t_aql a 
                    on e.aql_id = a.aql_id  
                inner join t_aql_ver av 
                    on av.id=a.aql_ver_id   
                inner join t_carton_box c 
                    on e.carton_box = c.carton_box  
                inner join t_entries ee 
                    on case 
                        when sum(ee.reject) < a.reject 
                                then 'A' 
                        else 'R' end )

我尝试使用上面的代码但不起作用:(

抱歉描述不好。我有表t_carton_box和列,其中一个是状态。所有记录的状态需要用字母'A'或'R'更新。如果sum(t_entries.rejecte)&lt;将取决于哪个字母。 t_aql.reject。还必须包含其他内部联接,因为该条件将为我提供正确的值t_aql.reject -

更新

t_entries有列entry_id,accept,reject,carton_box,fk_aql_id t_aql有列aql_id,accept,reject,fk_aql_ver_id t_aql_ver有列id,名称t_carton框有列carton_box_id,carton_box,status表t_entries可以包含多个记录,包含相同的carton_box和列accept和reject是int。我需要从t_entries获取carton_box的拒绝总和,并且从t_aql检查更大。如果表格中的carton_box更大,则t_carton_box将使用“R”更新状态,否则为“A”。我希望你能更清楚地了解它。

2 个答案:

答案 0 :(得分:0)

它不起作用,因为您尝试使用多个值更新一个列。 即状态为一列,而*将为您提供多列。

set status =  (select * 

基于OP的编辑,SQL将是:

UPDATE TCB
SET TCB.STATUS = TE_SUM_O.STATUS
FROM T_CARTON_BOX TCB
INNER JOIN (
            SELECT TE_SUM.CARTON_BOX,(CASE WHEN TE_SUM.REJECT=TE_SUM.TE_REJECT THEN 'R' ELSE 'A' END)STATUS
            FROM(
            SELECT TE.CARTON_BOX,TA.REJECT,SUM(TE.REJECT)TE_REJECT
            FROM T_AQL TA
            INNER JOIN T_ENTRIES TE
            ON TA.AQL_ID = TE.FK_AQL_ID
            GROUP BY TE.CARTON_BOX,TA.REJECT)TE_SUM
            )TE_SUM_O
ON TCB.CARTON_BOX=TE_SUM_O.CARTON_BOX

答案 1 :(得分:0)

返回*的子选择永远不会使用相等的比较'='