如何将此 MySQL SELECT 查询转换为 DELETE 查询?

Posted

技术标签:

【中文标题】如何将此 MySQL SELECT 查询转换为 DELETE 查询?【英文标题】:How to turn this MySQL SELECT query into a DELETE query? 【发布时间】:2009-11-20 12:19:51 【问题描述】:

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

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 服务器 使用正确语法的版本 'WHERE entries.sheetID = 附近 sheet.id 和 sheet.clientID = 13' 在 第 1 行

我在这里做错了什么?

【问题讨论】:

您是要从工作表、条目还是两者中删除行? Andomar:我想从客户端 13 中删除所有工作表和工作表条目。如果没有必要,我宁愿不使用超过 1 个查询。 【参考方案1】:

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,那么您需要一次从一个表中删除行,您可以使用此处发布的其他解决方案之一。

【讨论】:

【参考方案2】:

试试

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

我一次从 2 个表中搜索 SQL 删除并找到 this forum post

【讨论】:

另一个正确,但文档记录略少的答案 :) 谢谢!【参考方案3】:

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

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

【讨论】:

【参考方案4】:

你能试试这样的吗

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

如果它来自条目

【讨论】:

问题是我想同时从两者中删除。我想从客户端 13 中删除所有工作表和工作表条目。如果没有必要,我宁愿不使用超过 1 个查询。【参考方案5】:

我相信您一次只能在一张桌子上DELETE

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

DELETE FROM sheets
WHERE sheets.clientID = 13

【讨论】:

MySQL实际上允许多表删除dev.mysql.com/doc/refman/5.0/en/delete.html 谢谢安多玛,每天都是上学日!【参考方案6】:

您一次只能从一个表中删除。如果您想从同一个查询中驱动两个删除,您可以执行以下操作:

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);

【讨论】:

第二个会失败,因为你已经删除了连接表的行 这在 MySQL 中显然不是这样,正如其他答案中所述,它支持 OP 尝试创建的 DELETE 语句(语法略有不同)。

以上是关于如何将此 MySQL SELECT 查询转换为 DELETE 查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何将此 MySQL 查询转换为 Laravel?

如何将此查询从 MSSQL 转换为 MySQL?

如何将此 SQL 查询转换为 Django?

如何将此查询从SQL(mysql)转换为Eloquent(Laravel)

如何将此 GROUP BY / MIN SQL 查询转换为 LINQ?

如何将mysql中的select语句转换为java中的查询?