2011-05-17 58 views
3

我試圖做這樣的事情:MySQL - 如何從嵌套表中刪除select時使用該表?

DELETE FROM table_1 
WHERE table_1.id IN (SELECT table_1.id 
         FROM table_1, 
          table_2, 
          table_3 
         WHERE table_1.id = table_2.table_1_id 
         AND table_2.id = table_3.table_2_id 
         AND table_3.id = 5) 

好像MySQL不會讓我有在嵌套SELECT table_1。建議?

+0

我不知道爲什麼它不會......它會在執行DELETE之前執行SELECT。你遇到了什麼錯誤? – 2011-05-17 23:56:32

回答

4

你可能會收到此錯誤:

ERROR 1093 (HY000): You can't specify target table 'table_1' for update in FROM clause. 

你應該能夠做到這一點使用MySQL的多表DELETE語法來代替:

DELETE table_1.* 
FROM table_1, 
     table_2, 
     table_3 
WHERE table_1.id = table_2.table_1_id 
AND table_2.id = table_3.table_2_id 
AND table_3.id = 5 

上面的查詢應該工作,但作爲我會推薦使用ANSI JOIN語法的一般規則:

DELETE table_1.* 
FROM table_1 
INNER JOIN table_2 on table_2.table_1_id = table_1.id 
INNER JOIN table_3 on table_3.table_2_id = table_2.id 
WHERE table_3.id = 5 
+0

@IKE - 是的,這是我得到的錯誤。問題是我需要刪除多個記錄,而不僅僅是'id ='指定的記錄。這就是爲什麼我試圖使用'IN'和嵌套選擇。 – StackOverflowNewbie 2011-05-18 00:41:11

+0

您可以使用多表刪除語法刪除多行。只需帶上你的嵌套SELECT並將其變爲DELETE。我剛剛從你的例子中複製了代碼。如果它不代表您正在運行的實際查詢,請更新您的示例。 – 2011-05-18 00:47:58

+0

對不起,嵌套select會返回很多table_1.id。這就是我使用'IN'的原因。這有幫助嗎? – StackOverflowNewbie 2011-05-18 00:56:04