2012-06-14 48 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」