Error: You can't specify target table 'trans_work_bill' for update in FROM clause
时间: 2024-10-31 16:08:40 浏览: 36
这个错误提示表明你在SQL语句的FROM子句中试图对目标表`trans_work_bill`进行更新操作,这是不允许的。在SQL查询中,FROM子句用于指定数据来源,而WHERE子句则用于定义更新操作的条件。你应该把`UPDATE`语句移到FROM子句之后,仅在WHERE子句中引用`trans_work_bill`表。
正确的格式应该是这样的:
```sql
UPDATE trans_work_bill
SET yn = 0
WHERE trans_work_code IN (
SELECT trans_work_code
FROM trans_work_bill
WHERE carrier_driver_code = 'pengxin9'
AND vehicle_number = '粤BX4837'
AND work_status != 30
);
```
在这个例子中,外部的子查询只用于筛选符合条件的`trans_work_code`,然后内部的`UPDATE`语句再根据这些代码进行更新。
如果你仍然遇到这个错误,可能是其他语法问题或者是尝试在一个子查询中更新自身,这种情况下通常需要重新设计查询逻辑。
相关问题
You can t specify target table res_device_info for update in FROM clause
This error message usually occurs in SQL when you try to update a table that is also used in the FROM clause of the same query. To resolve this issue, you can use a subquery to update the table instead. Here's an example:
```sql
UPDATE res_device_info
SET column_name = new_value
WHERE device_id IN (
SELECT device_id
FROM res_device_info
WHERE condition
);
```
In this example, you can replace `column_name`, `new_value`, `condition` with the appropriate values for your scenario. Make sure to adjust the subquery's condition to match your requirements.
SQL语句执行报错:You can't specify target table 'bpm_pro_inst' for update in FROM clause
这个错误是因为在 SQL 语句中使用了子查询,子查询中涉及到了要更新的目标表,而 MySQL 不支持在子查询中更新目标表。可以尝试将子查询中涉及到要更新的目标表的部分改为另外一个临时表或者使用 JOIN 等其他方式实现相同的查询逻辑。例如,可以将子查询中的表用一个临时表存储起来,然后再执行更新操作,类似于以下代码:
```
CREATE TEMPORARY TABLE temp_table AS SELECT * FROM bpm_pro_inst WHERE ...;
UPDATE bpm_pro_inst SET ... WHERE id IN (SELECT id FROM temp_table);
DROP TEMPORARY TABLE temp_table;
```
阅读全文