0

我想编写一个查询以从 x 表和 y 表中删除,其中 object id="123" 从 z 表中为 'z' 表中的给定名称选择对象 id。如何为此编写 sql 查询?

请告诉我 。

4

3 回答 3

3

您不能同时从两个表中删除。您需要两个删除语句。

DELETE
  x
WHERE
  object_id IN (SELECT object_id FROM z WHERE name = 'whatever')

DELETE
  y
WHERE
  object_id IN (SELECT object_id FROM z WHERE name = 'whatever')

我用过IN以防万一您有多个具有相同名称的对象。您可能希望更改该行为以满足您的需要。

于 2012-06-14T10:23:36.610 回答
3

尝试这个..

delete t1,t2 from x t1 inner join y t2 on t1.id=t2.id where t1.id in 
(SELECT object_id FROM z WHERE name = 'YourName');

经测试Mysql

于 2012-06-14T10:41:50.120 回答
0

从单个批次(池)中的不同表中删除是一个同步过程,即它一个一个地执行,因此您需要编写2个不同的查询来根据您的要求删除任何数据。

假设给定名称只有 1 个数据
DELETE X
WHERE object_id = object_id FROM Z WHERE name = 'name'
DELETE y
WHERE object_id = object_id FROM z WHERE name ='name'

这提供了比“IN”更好的性能

好吧,如果您对一个名称有多个记录,那么您必须使用“IN”

于 2012-07-19T02:56:02.673 回答