MySQL - 使用UNION从多个表中删除?

时间:2014-02-04 19:25:25

标签: mysql

我的表格都具有相同的列,并且已经将它们分开,以保持它们的小。

e.g。 表 - cpus,gfxcards,监视器。 列 - titleId,categoryId,name。

我正在尝试做的与此相似

SELECT * FROM cpus
UNION
SELECT * FROM gfxcards;
DELETE FROM test WHERE (titleId,categoryId) IN ((2,0));

有没有办法做到这一点,还是我必须使用交易来避免多次删除查询?

3 个答案:

答案 0 :(得分:2)

啊,没关系。我找出了我正在寻找的查询。例如要从'cpus'表中删除ID为4,7的CPU,并从'monitors'表中删除ID为105,106的监视器,以下单个查询将起作用。

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;

如果您需要这些是原子的,那么将它们包装在一个事务中。然后,删除将在事务提交时发生。

顺便说一下,这就是为什么你不想要这样的并行表的原因之一。你应该有一个单独的表,其中一个类型列指定了该对象。