MySQL DELETE语句中的子查询条件
在使用子查询作为条件从表中删除行时,可能会遇到语法错误。要解决此问题,需要考虑在DELETE操作中使用子查询的限制。
在MySQL中,不能直接在DELETE语句的WHERE子句中使用子查询。但是,有一种巧妙的方法可以解决这个限制。通过使用额外的子查询来包含原始子查询,可以成功执行删除操作。
例如,以下查询:
<code class="language-sql">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 );</code>
会产生语法错误。但是,通过将子查询包装在另一个子查询中,如下所示:
<code class="language-sql">DELETE e.* FROM tableE e WHERE id IN (SELECT id FROM (SELECT id FROM tableE WHERE arg = 1 AND foo = 'bar') x);</code>
可以成功执行删除操作。请记住,封闭的子查询应该被命名,如示例中“x”别名所示。
以上是如何在MySQL DELETE语句中正确使用子查询?的详细内容。更多信息请关注PHP中文网其他相关文章!