You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用LEFT JOIN从数据库多表删除数据?SQL报错求助

解决MySQL多表LEFT JOIN删除的1064语法错误

咱们先揪出问题根源:你写的DELETE *是错误的!MySQL在多表JOIN场景下执行DELETE时,不能用星号,必须明确告诉数据库你要删除哪些表的记录——毕竟LEFT JOIN涉及多个表,数据库得知道哪些表的行需要被移除。

给你两种正确的写法,都能实现你要的效果:

写法一:DELETE后指定要删除的表名

直接在DELETE后面列出所有需要删除数据的表,这样数据库就会删除这些表中匹配条件的行(即使某些表没有对应匹配项,也不会影响其他表的删除操作):

DELETE tblapps, tblapps2, tblapps3, payments
FROM tblapps
LEFT JOIN tblapps2 ON tblapps.app_id = tblapps2.app_id
LEFT JOIN tblapps3 ON tblapps.app_id = tblapps3.app_id
LEFT JOIN payments ON tblapps.app_id = payments.app_id
WHERE tblapps.app_id = 'EVISA2505545524';

如果只需要删除部分表的行(比如只删tblapps和payments),只需要把对应表名留在DELETE后面就行,比如DELETE tblapps, payments

写法二:使用USING子句

这种写法逻辑更清晰,把表关联部分放到USING里,DELETE后面不用重复写表名(当然也可以指定):

DELETE
FROM tblapps, tblapps2, tblapps3, payments
USING tblapps
LEFT JOIN tblapps2 ON tblapps.app_id = tblapps2.app_id
LEFT JOIN tblapps3 ON tblapps.app_id = tblapps3.app_id
LEFT JOIN payments ON tblapps.app_id = payments.app_id
WHERE tblapps.app_id = 'EVISA2505545524';

重要提醒

执行删除操作前,强烈建议先把DELETE改成SELECT *,查看一下将要删除的记录是否符合预期,避免误删:

SELECT *
FROM tblapps
LEFT JOIN tblapps2 ON tblapps.app_id = tblapps2.app_id
LEFT JOIN tblapps3 ON tblapps.app_id = tblapps3.app_id
LEFT JOIN payments ON tblapps.app_id = payments.app_id
WHERE tblapps.app_id = 'EVISA2505545524';

内容的提问来源于stack exchange,提问作者imgrv

火山引擎 最新活动