You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子查询无返回结果时,如何用单SQL语句更新Post表的top_comment

解决方案

直接将top_comment的赋值改为标量子查询即可,当没有符合条件的获赞评论时,子查询会返回NULL,自动将字段更新为NULL:

UPDATE post
SET top_comment = (
    SELECT body
    FROM comment
    WHERE count_like > 0
      AND fk_post = 1
    ORDER BY count_like DESC
    LIMIT 1
)
WHERE pk_post = 1;

原语句的问题分析

你原来的写法使用了FROM子查询关联的方式:如果子查询没有返回任何行(所有评论都无点赞),整个UPDATE语句找不到匹配的更新行,因此不会执行任何更新操作,top_comment会保留原来的值。

而改用标量子查询赋值的方式后,无论子查询是否有结果,都会对WHERE pk_post = 1匹配到的帖子行执行更新:

  • 存在获赞评论时,子查询返回获赞最高的评论内容,正常更新;
  • 无获赞评论时,子查询返回NULL,自动将top_comment设为NULL。

这个写法在MySQL、PostgreSQL、SQL Server等主流关系型数据库中都能正常工作。

内容的提问来源于stack exchange,提问作者Dercni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:27:29