我的表格都具有相同的列,并且已经将它们分开,以保持它们的小。
e.g。 表 - cpus,gfxcards,监视器。 列 - titleId,categoryId,name。
我正在尝试做的与此相似
SELECT * FROM cpus
UNION
SELECT * FROM gfxcards;
DELETE FROM test WHERE (titleId,categoryId) IN ((2,0));
有没有办法做到这一点,还是我必须使用交易来避免多次删除查询?
答案 0 :(得分:2)
DELETE
c, m FROM cpus c, monitors m
WHERE
(c.titleId,c.categoryId) IN ( (4,0), (7,0) )
AND
(m.titleId,m.categoryId) IN ( (105,3), (106,3) );
但感谢回复=)
答案 1 :(得分:0)
您可以使用连接语法执行多表删除语句。它可能是这样的:
delete from cpus, gfxcards using cpus, gfxcards where cpus.titleId = gfxcards.categoryId;
这是表格相关的。否则,您可以使用存储过程或函数。
答案 2 :(得分:0)
MySQL确实支持同时从多个表中删除。但是,为什么不做三次删除?
delete from cpus where titleId = 2 and categoryId = 0;
delete from monitors where titleId = 2 and categoryId = 0;
delete from gfxcards where titleId = 2 and categoryId = 0;
如果您需要这些是原子的,那么将它们包装在一个事务中。然后,删除将在事务提交时发生。
顺便说一下,这就是为什么你不想要这样的并行表的原因之一。你应该有一个单独的表,其中一个类型列指定了该对象。