【问题标题】:How to SELECT inside UPDATE in a MYSQL query如何在 MYSQL 查询中的 UPDATE 内部进行 SELECT
【发布时间】:2021-02-13 18:39:45
【问题描述】:

已经存在多个询问它的帖子,已经给出了解决方案,并且它们适用于我以前的查询。 但是现在我在同一个表的 UPDATE 中尝试对 SELECT 进行相同的查询,这将不起作用。

这是我尝试过的不同查询:

UPDATE usersDB.random
SET total_partners =
(
SELECT total_partners FROM usersDB.random
WHERE year = 2022
)
WHERE uid = 1

UPDATE usersDB.random
SET total_partners = 
(
SELECT total_partners
FROM usersDB.random
AS x
WHERE year = 2022
)
WHERE uid = 1

但我每次都会收到此错误消息:

错误代码:1093。您不能指定目标表“随机”进行更新 在 FROM 子句中

相同的查询,但有两个不同的表工作:

UPDATE usersDB.random
SET total_partners =
(
SELECT COUNT(*)
FROM usersDB.partners AS x
)
WHERE (month = MONTH(CURRENT_DATE()) and year = YEAR(CURRENT_DATE())) OR uid = 1

当它是同一张桌子时,我怎样才能让它工作? Mysql的版本是8.0

这是random 表的样子https://i.imgur.com/HYSS5DJ.png

我使用 Mysql Workbench 发送查询

【问题讨论】:

  • @Strawberry 我不确定如何提供可重现的示例,因为您需要创建架构、表等。这就是为什么我提供了一个与那个不工作。我认为这就足够了。
  • 你能显示你的表结构吗?因为总的来说,上述所有查询似乎都可以
  • 因此我的评论
  • @IdleJatt 我提供了它的截图

标签: mysql sql-update sql-insert mysql-8.0


【解决方案1】:

由于您没有提供简单的测试数据Create Table/Insert Into (copypaste text) 脚本,我不得不尝试自己的表格方案。看看这个aTemp临时表我如何使用两级内表。

Update person Set 
city=(
 Select Concat(now(),"-",aTemp.val1) from
 (select count(*) as val1 from person) as aTemp
)
Where id=4

所以在我看来,它可能会转化为这个查询。

UPDATE usersDB.random
SET total_partners=(
 Select aTemp.val1 From
 (SELECT count(*) as val1 FROM usersDB.random WHERE year=2022) aTemp
)
WHERE uid = 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    相关资源
    最近更新 更多