如何编写仅删除关联表tbl1指定记录的SQL DELETE语句
正确的JOIN式DELETE语句(仅删除tbl1数据)
你的问题核心是没有明确指定要删除的目标表——当你写DELETE FROM tbl1 INNER JOIN...时,数据库无法判断你要删除关联中的哪张表数据,所以才会出现误删或报错的情况。只需要在DELETE关键字后明确标记要删除的表(原表名或别名均可),就能精准操作tbl1的数据。
以下是两种清晰可靠的写法:
写法一:直接使用原表名
DELETE tbl1 FROM tbl1 INNER JOIN tbl2 ON tbl2.terms_id = tbl1.terms_id WHERE tbl2.taxonomy = 'category' AND tbl1.post_id = 4001
写法二:使用别名(更适合复杂查询,可读性更强)
DELETE t1 FROM tbl1 t1 INNER JOIN tbl2 t2 ON t2.terms_id = t1.terms_id WHERE t2.taxonomy = 'category' AND t1.post_id = 4001
效果验证
结合你给出的测试数据:
- tbl1中
post_id=4001的行对应terms_id为2、1、3 - 关联tbl2后,只有
terms_id=1的taxonomy值是category - 执行语句后,只会删除tbl1中ID=2的那条记录,tbl2的数据完全不受影响
内容的提问来源于stack exchange,提问作者sajib
相关产品推荐
相关产品推荐

