如何用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




