2012-06-14 45 views
0

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

请让我知道。

+0

你尝试过什么吗? –

+0

我无法形成这个查询。 – harqs

+1

对接近的选民:我同意这个问题对细节很重要,但它肯定不会“争辩辩论,争论,投票或扩大讨论”。 – MatBailie

回答

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以防万一您有多个对象具有相同的名称。您可能需要更改该行为以满足您的需求。

+0

我想同时从表X和Y中删除 – harqs

+1

@harqs - '你不能一次从两个表中删除.'这是一个可靠的事实。你可以在上面的代码中使用事务来使它“出现”这种方式,但它不能作为单个语句来完成。 – MatBailie

+0

我进行这样的选择,但不知道如何改变这种为删除<选择的id =“一个”参数类型=“地图” \t \t statementType =“通知”结果=“MAP”> \t \t选择objProp.actual_object_id , \t \t objProp.is_shared \t \t从t_object objProp \t \t其中objProp.actual_object_id = \t \t#{} domainObject.id \t – harqs

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

+0

可以ü请解释一下这个查询 – harqs

+0

这里't1'和't2'是你的表'x'和'y'的别名。这个查询是根据你想要的名字从'z'表中选择'object_id',并从表'x和y'的别名('t1和t2')中删除受尊重的行。 – manurajhada

+0

如何以mybatis删除语法的形式使用此查询? – harqs

0

从一个批处理(池)中的不同表中删除是一个同步进程,即它将逐个执行,因此需要根据需要编写2个不同的查询来删除任何数据。

假设仅存在1个数据具有给定名称
DELETE X
WHERE的object_id =的object_id FROM z,其中名称= '名称'
DELETEý
WHERE的object_id =的object_id FROM z,其中名称= '名称'

这提供更好的性能,然后“IN”

好offcourse如果你有一个名称的多个记录,那么你必须使用“IN”