You can't specify target table 'sw' for update in FROM clause
时间: 2023-08-16 19:04:28 浏览: 201
这个错误通常出现在 MySQL 中,是因为 MySQL 不允许在 UPDATE 或 DELETE 语句中直接使用 FROM 子句中定义的表。
例如,在以下 SQL 语句中,将从表 t1 中选择的数据与从表 t2 中选择的数据进行 JOIN,然后将结果用于更新表 t2:
```
UPDATE t2
SET t2.column = value
FROM t1
JOIN t2 ON t1.id = t2.id
WHERE t1.column = value;
```
这条 SQL 语句会导致上述错误。为了解决这个问题,可以使用子查询来代替 FROM 子句。例如,可以编写以下 SQL 语句来更新表 t2:
```
UPDATE t2
SET t2.column = value
WHERE t2.id IN (
SELECT t1.id
FROM t1
WHERE t1.column = value
);
```
这条 SQL 语句将从表 t1 中选择的数据与条件匹配的表 t2 中的数据进行更新。注意,在这个例子中,FROM 子句被替换为一个子查询,可以避免上述错误。
相关问题
[HY000][1093] You can t specify target table student for update in FROM clause
这个错误是由于MySQL的限制所导致的,当我们在一个UPDATE语句中需要更新的表同时在FROM子句中被引用时,就会出现这个错误。MySQL不允许在同一个语句中更新和查询同一个表。
为了解决这个问题,我们可以使用子查询来避免在同一个语句中同时更新和查询同一个表。具体来说,我们可以将需要更新的表放在子查询中,然后在外层查询中引用这个子查询的结果集来更新需要更新的数据。示例代码如下:
UPDATE student SET score = 90 WHERE id IN (SELECT id FROM (SELECT id FROM student WHERE score < 60) AS t);
在这个例子中,我们需要将学生成绩小于60分的记录的成绩更新为90分。由于我们需要更新的表student同时也在FROM子句中被引用,因此我们使用子查询将需要更新的记录的id取出来,然后在外层查询中更新这些记录的成绩为90分。
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.
阅读全文