根据 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 和最小值更新数据库中的记录的主要内容,如果未能解决你的问题,请参考以下文章

根据另一个表中的值插入和/或更新记录

SQL Server 根据字段的值触发插入和/或更新的记录

mysql使用游标遍历数据进行批量针对性更新数据,急求mysql大神解答

仅当高于 0 时才计算每列的最小值和最大值之间的差异

如何在 MySQL 中获取记录数以及最小值/最大值?

Laravel eloquent 更新记录的最小值