为啥这个使用 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 查询效率问题 left join 改成 inner join union
SQL中的JOIN类型解释(CROSS, INNER,OUTER),关键字ON,USING
为啥 data.table 的 inner_join 行为不同?