You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delete语句可正常运行但未删除行,请求排查原因

问题诊断

嘿,我一眼就揪出问题根源了——你在IN子句里的列顺序完全搞反了!

你写的DELETE语句里,是用(client_id, art_no)去匹配子查询的结果,但子查询返回的是(art_no, client_id)。数据库会按顺序逐一匹配:拿article.client_id和子查询的第一个列art_no对比,拿article.art_no和子查询的第二个列client_id对比,这显然不可能找到匹配的行,自然就没有数据被删除了。

另外还要提一句:你子查询里的a.cliend_id是拼写错误,应该是A.client_id——虽然你说子查询返回结果正确,但这个笔误可能在某些数据库里会报错,建议一起修正。

修正后的SQL语句

把子查询的列顺序调整成和主表匹配的(client_id, art_no),同时修正拼写错误:

DELETE FROM article 
WHERE (client_id, art_no) IN (
    SELECT D.client_id, A.art_no 
    FROM art_del AS A 
    INNER JOIN (SELECT DISTINCT client_id FROM article) AS D 
        ON A.client_id = D.client_id
    WHERE label NOT IN (0, -1)
);
额外建议
  • 预览待删除行:执行DELETE前,先把语句改成SELECT * FROM article WHERE ...,预览一下要删除的记录,确保逻辑正确,避免误删数据。
  • 验证子查询结果:单独运行子查询SELECT D.client_id, A.art_no FROM ...,确认返回的列顺序和主表的(client_id, art_no)完全一致,且确实存在和主表匹配的记录。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 23:42:43