根据 parentId 和最小值更新数据库中的记录

Posted

技术标签:

【中文标题】根据 parentId 和最小值更新数据库中的记录【英文标题】:Update record in DB based on parentId and min value 【发布时间】:2020-11-20 20:21:56 【问题描述】:

我有一张这样的桌子。

ID | ParentId | Level | LevelStatus
1       1         5         NULL
2       1         6         NULL
3       2         4         NULL
4       2         2         NULL
5       3         2         NULL

我需要为 parentId 的每个最小级别更新列 LevelStatus 的值 1。例如,parentId 1 的最低级别是级别 5,因此它应该只更新该记录,对于 parentId 2 它应该更新级别为 2 的记录。

我知道如何选择正确的记录。像这样的:

SELECT DISTINCT ParentId, MIN(Level) AS MinLevel
FROM TableA
GROUP BY ParentId

但是不知道怎么用它来写更新语句。

【问题讨论】:

用您正在使用的数据库标记您的问题。 不要根据其他表数据存储值,只会导致数据不一致。而是创建一个视图。 【参考方案1】:

您可以使用相关子查询:

update tablea
    set levelstatus = 1
    where level = (select min(a2.level)
                   from tablea a2
                   where a2.parentid = a.parentid
                  );

这是标准 SQL 语法,应该适用于每个数据库。 . .除了 mysql 和 MariaDB。

【讨论】:

以上是关于根据 parentId 和最小值更新数据库中的记录的主要内容,如果未能解决你的问题,请参考以下文章