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

MariaDB中如何编写同表查询并更新is_popular字段的正确SQL语句?

解决MariaDB更新多行时的子查询错误

原语句报错是因为使用了=运算符,它只能匹配单个值,但子查询返回了10条id记录,导致ERROR 1242。可以通过以下两种方式修正:

方法一:使用IN替代=

将WHERE id=改为WHERE id IN,让条件匹配子查询返回的多个id值:

UPDATE Pics 
SET is_popular = true 
WHERE id IN ( 
   SELECT p.id 
   FROM Pics p 
   WHERE p.approved = true 
   ORDER BY p.points DESC 
   LIMIT 10
);

方法二:使用JOIN方式更新(更高效)

对于大数据量的表,JOIN方式的更新性能更优,写法如下:

UPDATE Pics 
JOIN (
    SELECT id 
    FROM Pics 
    WHERE approved = true 
    ORDER BY points DESC 
    LIMIT 10
) AS top_pics ON Pics.id = top_pics.id
SET is_popular = true;

补充说明

  • 两种方法都能实现需求:将已审核(approved=true)且points降序前10的记录的is_popular设为true。
  • JOIN方式避免了子查询的嵌套,在数据量大时执行效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 19:18:12