假设我有一个产品表,并且只有 2 个字段; id 和购买日期。我想删除 2019 年购买的最后一件产品。
我尝试使用以下查询来做到这一点:
DELETE FROM products
WHERE id = (SELECT id
FROM products
WHERE purchase_date LIKE '2019%'
ORDER BY purchase_date DESC
LIMIT 1);
不幸的是,出现了标题中写的错误。我知道这个错误是一个已知错误,我已经尝试寻找解决方案。我看过了here https://stackoverflow.com/a/14302701/14400600 and here https://stackoverflow.com/questions/45494/mysql-error-1093-cant-specify-target-table-for-update-in-from-clause,但是,我无法理解如何更改我的查询以使其正常工作。
我将很高兴获得帮助和解释。提前致谢。
Try this
DELETE FROM products
WHERE id = (SELECT * FROM
(SELECT id
FROM products
WHERE purchase_date LIKE '2019%'
ORDER BY purchase_date DESC
LIMIT 1)tblTmp);
查询基本相同,只是内部选择被包装在另一个选择中。
最需要注意的是,原始选择已被赋予别名“tblTmp”。 (名称 tblTmp 是任意的,您可以给它任何别名。)
别名很重要,因为分配一个别名将告诉 MySQL 从该选择查询创建一个临时表。
然后临时表可以用作更新语句的源标准。
它被包装在另一个查询中的原因是因为当它是更新语句的一部分时,MySQL 语法不允许您为选择查询分配别名。
因此,我们必须将其放入另一个查询中,我认为该查询将其与更新语句分开。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)