本文介绍了MySQL DELETE FROM 以子查询为条件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!
问题描述
我正在尝试进行这样的查询:
I am trying to do a query like this:
DELETE FROM term_hierarchy AS th
WHERE th.parent = 1015 AND th.tid IN (
SELECT DISTINCT(th1.tid)
FROM term_hierarchy AS th1
INNER JOIN term_hierarchy AS th2 ON (th1.tid = th2.tid AND th2.parent != 1015)
WHERE th1.parent = 1015
);
如您所知,如果同一个 tid 有其他父级,我想删除与 1015 的父级关系.但是,这给我带来了语法错误:
As you can probably tell, I want to delete the parent relation to 1015 if the same tid has other parents. However, that yields me a syntax error:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS th
WHERE th.parent = 1015 AND th.tid IN (
SELECT DISTINCT(th1.tid)
FROM ter' at line 1
我已经检查了文档,并自行运行了子查询,一切似乎都已检查完毕.谁能弄清楚这里出了什么问题?
I have checked the documentation, and run the subquery by itself, and it all seems to check out. Can anyone figure out what's wrong here?
更新:如下所述,MySQL 不允许您删除的表用于条件的子查询.
Update: As answered below, MySQL does not allow the table you're deleting from be used in a subquery for the condition.
推荐答案
不能指定要删除的目标表.
You cannot specify target table for delete.
解决方法
create table term_hierarchy_backup (tid int(10)); <- check data type
insert into term_hierarchy_backup
SELECT DISTINCT(th1.tid)
FROM term_hierarchy AS th1
INNER JOIN term_hierarchy AS th2 ON (th1.tid = th2.tid AND th2.parent != 1015)
WHERE th1.parent = 1015;
DELETE FROM term_hierarchy AS th
WHERE th.parent = 1015 AND th.tid IN (select tid from term_hierarchy_backup);
这篇关于MySQL DELETE FROM 以子查询为条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!
本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!