mysql - 如果第一个条目的值不存在于任何行中,如何更新它?

标签 mysql

我有一个体重记录表:

id     userid   weight   is_start_weight
3      10       100      Y
5      10       98       N
7      11       120      N
9      11       115      N

每个用户在第一次输入“Y”时都必须有起始体重标志,但有些用户没有,我想设置它。

我可以通过这种方式选择这些用户:

SELECT p.userid
FROM weight_tracker_log p
WHERE NOT EXISTS (
    SELECT s.userid
    FROM weight_tracker_log s
    WHERE p.userid = s.userid AND s.is_start_weight = 'Y'
)

问题是如何将 is_start_weight 标志更新为“Y”?必须更新 id 最低的第一个用户条目。

可能是我的选择错误,也许我应该将每个用户的第一个条目更新为“Y”?

最佳答案

您可以使用如下查询为每个用户设置最低 ID:

update weight_tracker_log wtl join
       (select userid, min(id) as minid
        from weight_tracker_log
        group by userid
       ) u
       on wtl.userid = u.userid and wtl.id = u.minid
    set is_start_weight = 'Y'
    where wtl.is_start_weight <> 'Y';

编辑:

如果现有用户可以在非最小 ID 上拥有“Y”权重,则:

update weight_tracker_log wtl join
       (select userid, min(id) as minid,
               max(is_start_weight = 'Y') as has_y
        from weight_tracker_log
        group by userid
       ) u
       on wtl.userid = u.userid and wtl.id = u.minid and has_y = 0
    set is_start_weight = 'Y';

关于mysql - 如果第一个条目的值不存在于任何行中,如何更新它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32446721/

相关文章:

mysql - Sphinx:索引器显示空错误消息

java - 指定的 key 太长 - 最大 key 长度为 767 字节

mysql - 如何在 Windows 上通过命令行使用 mysqldump 导入 SQL 文件

mysql - hibernate 在数据存在的时间范围内不查询任何内容

mysql - 此错误背后的原因。错误! pid 文件管理器退出而不更新文件。在我的sql中

MySQL将float字段中的数据转换为decimal字段

mysql - 无法将我的应用程序连接到Docker Compose网络中的MySql服务

mysql - mysql中select语句存储过程

mysql - 如何在MySQL中查询以逗号分隔的字符串值?

php - Laravel 4 - 模型和一对多