You can't specify target table 'T_OB_CALLHIS_332000' for update in FROM clause
时间: 2023-12-14 12:38:23 浏览: 18
这个错误是因为在更新语句中,目标表和子查询中的同一个表不能同时出现,需要将子查询的结果先存储到一个临时表中再进行更新操作。你可以尝试使用以下语法来解决这个问题:
```
UPDATE T_OB_CALLHIS_332000
SET STATUS = '0'
WHERE ID IN (
SELECT * FROM (
SELECT ID
FROM T_OB_CALLHIS_332000
WHERE STATUS = '1'
AND CREATE_TIME < '2022-01-01 00:00:00'
) AS TEMP
);
```
这样就可以避免出现 "You can't specify target table 'T_OB_CALLHIS_332000' for update in FROM clause" 的错误了。
相关问题
UPDATE T_OB_CALLHIS_332000 set GROUP_ID=(SELECT GROUP_ID FROM T_OB_TASKITEM_332000 WHERE TASKITEM_ID=(SELECT taskitem_id FROM T_OB_CALLHIS_332000 WHERE RECORD_ID='202303089264649443yc')) where RECORD_ID='202303089264649443yc' > 3009 - UDAL - Handler process error: You can't specify target table 'T_OB_CALLHIS_332000' for update in FROM clause
这个错误是由于 MySQL 不允许在 UPDATE 查询的子查询中使用更新同一张表的操作。你可以尝试使用一个临时表来解决这个问题,将子查询结果存储到临时表中,然后再执行 UPDATE 操作,具体代码如下:
```
CREATE TEMPORARY TABLE tmp_table
SELECT GROUP_ID, taskitem_id
FROM T_OB_TASKITEM_332000
WHERE TASKITEM_ID = (
SELECT taskitem_id
FROM T_OB_CALLHIS_332000
WHERE RECORD_ID = '202303089264649443yc'
);
UPDATE T_OB_CALLHIS_332000
SET GROUP_ID = (
SELECT GROUP_ID
FROM tmp_table
)
WHERE RECORD_ID = '202303089264649443yc';
DROP TEMPORARY TABLE tmp_table;
```
这个方法将子查询的结果存储到了一个临时表中,然后使用这个临时表来更新目标表。最后别忘了删除临时表。
You can't specify target table 't_product_sup_cost' for update in FROM clause
这个错误通常是由于在MySQL中更新语句中使用了子查询,而子查询中又涉及到了要更新的表,导致MySQL无法确定要更新的表。解决这个问题的方法是使用临时表来存储子查询的结果,然后再进行更新操作。以下是一个示例代码:
```mysql
CREATE TEMPORARY TABLE temp_table
SELECT * FROM t_product_sup_cost WHERE ...
UPDATE t_product_sup_cost
SET ...
WHERE id IN (SELECT id FROM temp_table)
```
其中,`temp_table`是一个临时表,用于存储子查询的结果。在更新操作中,我们使用`IN`关键字来指定要更新的行,这样就可以避免在子查询中使用要更新的表了。
阅读全文