为啥这个使用 INNER JOIN 的 SQL DELETE 查询不起作用? [复制]

Posted

技术标签:

【中文标题】为啥这个使用 INNER JOIN 的 SQL DELETE 查询不起作用? [复制]【英文标题】:Why this SQL DELETE query using INNER JOIN is not working? [duplicate]为什么这个使用 INNER JOIN 的 SQL DELETE 查询不起作用? [复制] 【发布时间】:2018-08-21 20:34:46 【问题描述】:

我正在尝试执行涉及一些 INNER JOIN 的 SQL DELETE 查询。我只想从名为 Market_Commodity_Price_Series 的主表中删除。我正在使用 MySql

这是我的查询:

DELETE
FROM Market_Commodity_Price_Series AS MCPS
INNER JOIN MarketDetails_CommodityDetails AS MDCD
      ON MCPS.market_commodity_details_id = MDCD.id
INNER JOIN MarketDetails AS MD
      ON MDCD.market_details_id = MD.id
WHERE MD.market_name = "Kimironko"

问题是执行此查询时我收到以下错误消息:

#42000您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册以获取正确的语法使用 靠近'MCPS INNER JOIN MarketDetails_CommodityDetails AS MDCD ON 第 2 行的 MCPS.market_co'

“奇怪”的是这个查询的 SELECT * 版本运行良好,我获得了我期望的记录。

我想使用删除版本仅从 FROM 子句指定的主查询中删除这些记录。

怎么了?我错过了什么?我该如何解决这个错误?

【问题讨论】:

【参考方案1】:

您需要指定要从哪个表中删除记录: (注意DELETE后面的表别名)

DELETE MCPS
FROM Market_Commodity_Price_Series AS MCPS
INNER JOIN MarketDetails_CommodityDetails AS MDCD
      ON MCPS.market_commodity_details_id = MDCD.id
INNER JOIN MarketDetails AS MD
      ON MDCD.market_details_id = MD.id
WHERE MD.market_name = "Kimironko"

【讨论】:

以上是关于为啥这个使用 INNER JOIN 的 SQL DELETE 查询不起作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

SQL中的INNER JOIN和JOIN有啥区别

关于SQL 查询效率问题 left join 改成 inner join union

SQL中的JOIN类型解释(CROSS, INNER,OUTER),关键字ON,USING

为啥 data.table 的 inner_join 行为不同?

sql用inner join内关联查询有多条记录一样只取一条?

sql之inner join