如何删除SELECT INNER JOIN查询出的ytpointadder表对应匹配数据
正确删除语句及说明
报错原因
你写的删除语句无法运行核心有两个问题:
- DELETE多表关联操作需要显式指定要删除哪个表的记录
- DELETE语句不支持直接跟GROUP BY子句做分组操作
方案1:MySQL多表删除语法(无需分组逻辑)
如果你的需求是删除ytpointadder表中所有和watched表满足watched.watchedyt = ytpointadder.yturl且watched.ip = ytpointadder.ip的匹配记录,直接使用以下语句即可:
DELETE a FROM ytpointadder a INNER JOIN watched b ON b.watchedyt = a.yturl AND b.ip = a.ip;
方案2:兼容全数据库的子查询写法(保留原有分组逻辑)
如果你确实需要保留原SELECT语句的GROUP BY a.ip分组规则,仅删除分组匹配到的记录,可使用子查询实现,兼容所有主流SQL数据库:
DELETE FROM ytpointadder WHERE (ip, yturl) IN ( -- 套一层临时表解决部分数据库不允许同表子查询删除的问题 SELECT * FROM ( SELECT a.ip, a.yturl FROM ytpointadder a JOIN watched b ON b.watchedyt = a.yturl AND b.ip = a.ip GROUP BY a.ip, a.yturl ) AS temp_tab );
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

