代码之家  ›  专栏  ›  技术社区  ›  Mathias Bynens

如何将这个mysql select查询转换成一个delete查询?

  •  4
  • Mathias Bynens  · 技术社区  · 15 年前

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

    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服务器 要使用的正确语法的版本 靠近入口。挡板= sheets.id和sheets.clientid=13'在 第1行

    我在这里做错什么了?

    6 回复  |  直到 10 年前
        1
  •  10
  •   Andre Miller    15 年前

    MySQL4及以上支持 deleting from multiple tables at once ,使用以下语法:

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

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

        2
  •  2
  •   Larry Lustig    15 年前

    尝试

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

    我一次从两个表中搜索SQL删除,发现 this forum post

        3
  •  2
  •   Serge Meunier    15 年前

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

    DELETE sheets.*, entries.* FROM sheets, entries WHERE entries.sheetID = sheets.id AND sheets.clientID = 13
    
        4
  •  0
  •   Adriaan Stander    15 年前

    你能试试这样的吗

    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
    

    如果它来自条目

        5
  •  0
  •   J__    15 年前

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

    DELETE FROM entries
    WHERE entries.sheetID IN
    (SELECT ID FROM sheets WHERE clientID = 13)
    
    DELETE FROM sheets
    WHERE sheets.clientID = 13
    
        6
  •  0
  •   Wes    15 年前

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

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