Osk*_*son 3 mysql delete subquery select
我想删除表中的一个条目,其中多个字段与另一个选择子查询的结果相匹配,该查询从另一个表中获取数据。
这是我到目前为止所拥有的,尽管它不起作用:
DELETE FROM table1
WHERE table1.id IN
(SELECT id
FROM table1 a JOIN table2 b
ON a.field1 = b.field1
AND a.field2 = b.field2
AND a.field3 = b.field3
AND b.id = ?
)
Run Code Online (Sandbox Code Playgroud)
也许DELETE JOIN更可取
DELETE A.* FROM table1 A INNER JOIN table2 b
ON A.id = B.id
AND a.field1 = b.field1
AND a.field2 = b.field2
AND a.field3 = b.field3
AND b.id = ?;
Run Code Online (Sandbox Code Playgroud)
我写了一篇关于为什么DELETE与WHERE涉及的子查询是有点不健康的过去后,处理的矿山上背Feb 22, 2011:问题与MySQL子查询
尽管在改进查询优化器方面取得了很大进展,但对子查询的评估可能会使关键字无法用于下游的关键比较。
尝试收集您知道需要删除的密钥并DELETE JOIN使用它:
CREATE TABLE DeleteIDs SELECT id FROM table1 WHERE 1=2;
INSERT INTO table1
SELECT A.id FROM table1 A INNER JOIN table2 b
ON A.id = B.id
AND a.field1 = b.field1
AND a.field2 = b.field2
AND a.field3 = b.field3
AND b.id = ?
;
ALTER TABLE DeleteIDs ADD PRIMARY KEY (id);
DELETE B.* FROM DeleteIDs A INNER JOIN table1 B;
DROP TABLE DeleteIDs;
Run Code Online (Sandbox Code Playgroud)
也许索引会有所帮助
ALTER TABLE table1 ADD INDEX id123 (id,field1,field2,field3);
ALTER TABLE table2 ADD INDEX id123 (id,field1,field2,field3);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29782 次 |
| 最近记录: |