2009-11-20 101 views
4

我想從數據庫中刪除某些項目。我有以下查詢:如何將此MySQL SELECT查詢轉換爲DELETE查詢?

SELECT * 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 

This works,and returns 2 results。

現在我想把這個SELECT查詢變成DELETE查詢。但是,以下不工作:

DELETE FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 

的MySQL引發以下錯誤:

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE entries.sheetID = sheets.id AND sheets.clientID = 13' at line 1

我在做什麼錯在這裏?

+0

您是否試圖從工作表,條目或從兩者中刪除行? – Andomar 2009-11-20 12:23:25

+0

Andomar:我想刪除客戶端13中的所有工作表和工作表條目。如果不是真的有必要,我寧願不要使用超過1個查詢。 – 2009-11-20 12:35:19

回答

10

的MySQL 4,並支持高達deleting from multiple tables at once,使用的語法如下:

DELETE sheets, entries 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 

如果你使用低於版本4的MySQL,那麼你需要刪除行一次只能從一張表中選擇,您可以使用此處發佈的其他解決方案之一。

0

你可以嘗試這樣的事情

DELETE FROM sheets 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 

,如果你想從表中刪除,並

DELETE FROM entries 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 

如果從條目

+0

問題是我想同時從兩者中刪除。我想刪除客戶端13中的所有表單和表單條目。如果沒有必要,我寧願不要使用多於1個查詢。 – 2009-11-20 12:26:26

0

我相信你只能從一個表DELETE在一次。

DELETE FROM entries 
WHERE entries.sheetID IN 
(SELECT ID FROM sheets WHERE clientID = 13) 

DELETE FROM sheets 
WHERE sheets.clientID = 13 
+1

MySQL實際上允許多表刪除http://dev.mysql.com/doc/refman/5.0/en/delete.html – Andomar 2009-11-20 12:26:50

+0

感謝Andomar,每一天都是學校的一天! – 2009-11-20 13:05:25

2

嘗試

DELETE sheets, entries 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 

我GOOGLE了SQL從2個表一次刪除,發現this forum post

+0

另一個正確的,但略少記錄的答案:)謝謝! – 2009-11-20 12:36:55

0

一次只能從一個表中刪除。如果你想開車都來自相同的查詢刪除,你可以這樣做以下:

DELETE from sheets where id in (
SELECT sheets.id 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13); 
DELETE from entries where id in (
SELECT entries.id 
FROM sheets, entries 
WHERE entries.sheetID = sheets.id AND sheets.clientID = 13); 
+0

第二個失敗,因爲你已經刪除了連接表的行 – 2009-11-20 12:30:46

+0

這在MySQL中顯然是不正確的,正如其他答案所述,它支持OP試圖創建的DELETE語句(語法略有不同)。 – 2009-11-20 12:31:26

2

MySQL將讓你刪除了一個連接,但必須指定的列,因此,使用你的榜樣,正確的語法將是

 
DELETE sheets.*, entries.* FROM sheets, entries WHERE entries.sheetID = sheets.id AND sheets.clientID = 13 
相關問題