delete from erp_raw_data_202305 where id in (select id from erp_raw_data_202305 where djh not in (select djh from erp_detail_raw_data_202305 GROUP BY djh)) > 1093 - You can't specify target table 'erp_raw_data_202305' for update in FROM clause > 时间: 0.009s
时间: 2023-08-15 19:07:12 浏览: 89
这是一个MySQL的错误提示,意思是不能在FROM子句中指定要更新的目标表。通常情况下,MySQL不允许在一个语句中同时查询和更新同一个表。
解决这个问题的方法是使用临时表,将要更新的数据先查询出来放到临时表中,然后再更新原表。具体的SQL语句如下:
```
CREATE TEMPORARY TABLE temp_table
SELECT id FROM erp_raw_data_202305
WHERE djh NOT IN (SELECT djh FROM erp_detail_raw_data_202305 GROUP BY djh);
DELETE FROM erp_raw_data_202305
WHERE id IN (SELECT id FROM temp_table);
DROP TEMPORARY TABLE temp_table;
```
这样就可以避免在FROM子句中指定要更新的目标表的问题了。
相关问题
INSERT INTO yq_sbcrk_qd_copy ( F_CreatorUserId, F_CreatorTime, org_code, djh, rkzl, gslb, gmsj, rcksj, rck ) SELECT F_CreatorUserId, F_CreatorTime, org_code, sb_djh, sb_rkzl, sb_gslb, sb_gmsj, sb_rksj, '入库' FROM yq_sb_rk WHERE yq_sbcrk_qd_copy.qdid = yq_sb_rk.F_Id AND yq_sb_rk.F_Id = '428513248992565445'运行以后报错以下信息Unknown column 'yq_sbcrk_qd_copy.qdid' in 'where clause'
这个错误是因为在 WHERE 子句中使用了 yq_sbcrk_qd_copy.qdid 字段,但是这个字段在表中不存在。
可能的原因是:
1. yq_sbcrk_qd_copy 表中确实没有 qdid 字段,你需要检查表结构。
2. qdid 字段名拼写错误,你需要确认字段名是否正确。
3. SQL 语句的逻辑错误,你需要检查 SQL 语句的正确性。
如果确保表结构和字段名无误,可以检查 SQL 语句的逻辑是否正确。例如,可能需要使用 JOIN 子句来将 yq_sb_rk 表与 yq_sbcrk_qd_copy 表连接起来。
INSERT INTO yq_sbcrk_qd_copy ( F_CreatorUserId, F_CreatorTime, org_code, djh, rkzl, gslb, gmsj, rcksj, rck, qdid ) SELECT F_CreatorUserId, F_CreatorTime, org_code, sb_djh, sb_rkzl, sb_gslb, sb_gmsj, sb_rksj, '入库', F_Id FROM yq_sb_rk WHERE yq_sbcrk_qd_copy.qdid = yq_sb_rk.F_Id AND yq_sb_rk.F_Id = '428513248992565445'这个SQL有错误吗
这个SQL语句有错误。正确的语句应该是:
INSERT INTO yq_sbcrk_qd_copy (F_CreatorUserId, F_CreatorTime, org_code, djh, rkzl, gslb, gmsj, rcksj, rck, qdid)
SELECT F_CreatorUserId, F_CreatorTime, org_code, sb_djh, sb_rkzl, sb_gslb, sb_gmsj, sb_rksj, '入库', F_Id
FROM yq_sb_rk
WHERE F_Id = '428513248992565445' AND F_Id NOT IN (SELECT qdid FROM yq_sbcrk_qd_copy);
这个SQL语句的意思是:将yq_sb_rk表中F_Id='428513248992565445'的记录插入到yq_sbcrk_qd_copy表中,并将rck字段设置为'入库'。同时,确保yq_sb_rk表中的F_Id字段与yq_sbcrk_qd_copy表中的qdid字段不重复,以避免重复插入。
注意,这里使用了一个子查询来确保不重复插入。这个子查询返回yq_sbcrk_qd_copy表中所有的qdid值,如果yq_sb_rk表中的F_Id也在这些值中,则不会插入。这样可以避免重复插入相同的记录。
阅读全文