2009-11-20 69 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 
相关问题