繁体   English   中英

根据其他表列更新表列

[英]Updating table column based on other table column

我想更新表cases_proceedings,但是它将在其他表cases_attach_files中检查一些标准,即

SELECT cp.sno FROM cases_proceedings cp, cases_attach_files cf 
WHERE cp.`case_sno` = cf.`case_sno` AND cf.page_lbl_sno = 10 AND 
cp.`is_decided` = 0

但是,当我想更新第一个表的值并通过对子查询使用IN操作来搜索第一个表的sno时 ,如下所示:

UPDATE cases_proceedings 
     SET `is_decided` = 1 
WHERE sno IN(SELECT cp.sno FROM cases_proceedings cp, cases_attach_files cf 
WHERE cp.`case_sno` = cf.`case_sno` AND cf.page_lbl_sno = 10 AND 
cp.`is_decided` = 0);

它显示一个错误:

Error Code: 1093
You can't specify target table 'cases_proceedings' for update in FROM clause

我不知道该如何解决?

一种解决方法是将子查询包装在另一个子查询中:

UPDATE cases_proceedings 
SET is_decided = 1 
WHERE sno IN
(
    SELECT sno
    FROM
    (
        SELECT cp.sno
        FROM cases_proceedings cp
        INNER JOIN cases_attach_files cf 
            ON cp.case_sno = cf.case_sno AND
               cf.page_lbl_sno = 10 AND
               cp.is_decided = 0
    ) t
);

额外的子查询可解决该错误,因为它迫使MySQL实现包含联接的子查询。

根据文档 ,在MySQL中,您不能修改在SELECT部分​​中使用的同一表。

您可以将其包装在子查询中,也可以将两个表连接起来,如下所示:

UPDATE  cases_proceedings cp
        INNER JOIN cases_attach_files cf
            ON cp.case_sno = cf.case_sno
                AND cf.page_lbl_sno = 10 
                AND cp.is_decided = 0
SET     cp.is_decided = 1 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM