错误代码:1093。您无法在 FROM 子句中指定更新的目标表

Mod*_*ern 2 mysql sql sql-delete

假设我有一个产品表,并且只有 2 个字段;id 和购买日期。我想删除 2019 年购买的最后一个产品。我尝试使用以下查询来执行此操作:

DELETE FROM products
WHERE id = (SELECT id
            FROM products
            WHERE purchase_date LIKE '2019%'
            ORDER BY purchase_date DESC
            LIMIT 1);
Run Code Online (Sandbox Code Playgroud)

不幸的是,出现了标题中写的错误。我知道这个错误是一个已知错误,我已经尝试寻找解决方案。我已经查看了这里这里,但是,我无法理解如何更改我的查询以使其正常工作。

我将很高兴获得帮助和解释。提前致谢。

Dee*_*pak 7

尝试这个

\n
DELETE FROM products\nWHERE id = (SELECT * FROM\n            (SELECT id \n            FROM products\n            WHERE purchase_date LIKE '2019%'\n            ORDER BY purchase_date DESC\n            LIMIT 1)tblTmp);\n
Run Code Online (Sandbox Code Playgroud)\n

查询基本相同,只是内部 select 包含在另一个 select 中。\n最重要的是要注意的是,原始 select 已被赋予别名 \xe2\x80\x9ctblTmp\xe2\x80\x9c。(名称 tblTmp 是任意的,您可以给它任何别名。)\xc2\xa0\n别名很重要,因为分配别名将告诉 MySQL 从该选择查询创建临时表。\xc2\xa0\n临时表可能然后用作更新语句的源条件。\n\xc2\xa0\n它被包装在另一个查询中的原因是因为 MySQL 语法不允许您在选择查询是更新语句的一部分时为其分配别名.\xc2\xa0\n因此我们必须将其放入另一个查询中,我认为该查询将其与更新语句分开。

\n