2011-06-09 83 views
5

我有3列(ID,父,值)的一些數據和此查詢:以上與選擇刪除mysql的

SELECT * FROM test WHERE id = (
    SELECT parent FROM test WHERE id=2 AND value='value' LIMIT 1 
); 

查詢的偉大工程。

現在我該如何刪除而不是在一個查詢中選擇該ID?

回答

8

您無法從表中刪除並從子表中選擇相同的表。

但是,您可以在自聯接中使用該表。

DELETE t1 FROM test t1 
INNER JOIN test t2 ON (t1.id = t2.parent) 
WHERE t2.id = 2 and t2.value = 'value' 

不能使用limit在加入delete語句不order by
這是要麼加入或限制/順序,請選擇。

請參閱:http://dev.mysql.com/doc/refman/5.5/en/delete.html

+0

如果孩子首先被刪除會怎麼樣? – 2011-06-09 18:12:11

+0

@Justin,這隻會刪除t1中的項目。如果需要,MySQL將使用臨時表來保存連接結果集中的值。 – Johan 2011-06-09 18:16:45

+0

我不明白。你從哪裏得到t1和t2?我有一個表測試。 – Alqin 2011-06-09 18:25:03

4
DELETE FROM test WHERE id = (select * from (
    SELECT parent FROM test WHERE id=2 AND value='value' LIMIT 1) as t 
) 
+3

您之前試過它downvote我嗎? – 2011-06-09 18:11:28

+0

這實際上有效!我的第一印象是,這不會起作用,但它確實。坦克! – Alqin 2011-06-09 18:17:36

+0

@尼克,是的,我有,除此之外,評論中的文字是來自所提供鏈接的文字引用。 – Johan 2011-06-09 18:17:36