DELETE FROM返回1064错误

时间:2015-06-23 15:56:54

标签: sql mysqli mysql-workbench

我无法弄清楚为什么我的请求不起作用。我想删除表格热点中的热点以及在笔记本电脑中使用这些热点的笔记本电脑。给定用户ID = 2EA81 这是:

{
  "route": [
    {
      "zIndex": "0",
      "match": "true",
      "column": "6",
      "fare": "50.0",
      "source": "false",
      "length": "1",
      "name": "29",
      "row": "0",
      "width": "1"
    },
    {
      "zIndex": "0",
      "match": "true",
      "column": "9",
      "fare": "110.0",
      "source": "false",
      "length": "1",
      "name": "37",
      "row": "3",
      "width": "1"
    },
    {
      "zIndex": "0",
      "match": "true",
      "column": "10",
      "fare": "120.0",
      "source": "false",
      "length": "1",
      "name": "41",
      "row": "4",
      "width": "1"
    },
    {
      "zIndex": "0",
      "match": "true",
      "column": "8",
      "fare": "500.0",
      "source": "false",
      "length": "1",
      "name": "33",
      "row": "2",
      "width": "1"
    },
    {
      "zIndex": "0",
      "match": "true",
      "column": "7",
      "fare": "510.0",
      "source": "false",
      "length": "1",
      "name": "29",
      "row": "1",
      "width": "1"
    }
  ]
}

错误代码:1064。您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以便在'WHERE hotspot.user_id ='2EA81'和laptop.id ='第1行附近使用正确的语法

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

MySQL的multi-table DELETE syntax期望您列出实际应删除行的表,以便在DELETE关键字之后列出 - 它不会自动从所有连接表中删除。

如果您要删除hotspotslaptop中的行,则需要在DELETE之后列出这些行。我还建议将连接表达式更改为显式INNER JOIN,如链接文档的table_references section中所述。 MySQL应该在多表删除中支持隐式(逗号分隔FROM) - 我还没有测试过,但显式INNER JOIN无论如何都是首选的现代语法。

DELETE
  -- list tables to actually delete rows from
  hotspot,
  laptop
FROM
  -- Supply an explicit INNER JOIN
  hotspot
  INNER JOIN laptop ON laptop.id= hotspot.hotspot_ID
WHERE 
  -- Filter rows on conditions
  hotspot.user_id= '2EA81'

列出要删除的表与单个表DELETE语法不同,您不需要在DELETEFROM之间命名任何表,因为{{1}中的单个表}子句隐含为删除目标。