4

我想从数据库中删除某些项目。我有以下查询:

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

这有效,并返回 2 个结果。

现在我想把这个SELECT查询变成一个DELETE查询。但是,以下方法不起作用:

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

MySQL 抛出以下错误:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“WHERE entries.sheetID = sheet.id AND sheet.clientID = 13”附近使用正确的语法

我在这里做错了什么?

4

6 回答 6

10

MySQL 4 及更高版本支持一次从多个表中删除,使用以下语法:

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

如果您使用的是低于版本 4 的 MySQL,那么您需要一次从一个表中删除行,您可以使用此处发布的其他解决方案之一。

于 2009-11-20T12:28:04.743 回答
2

尝试

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

我一次用 google 从 2 个表中删除 SQL 并找到了这个论坛帖子

于 2009-11-20T12:27:44.087 回答
2

MySQL 将允许您删除连接,但您必须指定哪些列,因此使用您的示例,正​​确的语法是

DELETE sheet.*, entries.* FROM sheet, entries WHERE entries.sheetID = sheet.id AND sheet.clientID = 13
于 2009-11-20T12:33:16.170 回答
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

如果它来自条目

于 2009-11-20T12:23:24.687 回答
0

我相信你一次只能DELETE从一张桌子。

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

DELETE FROM sheets
WHERE sheets.clientID = 13
于 2009-11-20T12:24:09.740 回答
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);
于 2009-11-20T12:28:50.467 回答