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

MySQL中使用UNION多表查询并获取最后10条数据的方法

解决方法

错误原因

你遇到的问题是UNION组合查询时,单个子查询中的ORDER BY在未搭配LIMIT的情况下会触发语法错误。SQL规则中,UNION要求合并的结果集是无序的,单个子查询的排序没有实际意义,还会破坏UNION的语法逻辑。

正确的单条查询语句

如果不需要对合并结果去重,推荐用UNION ALL(比UNION性能更高,省去了去重校验步骤),将两个关联查询作为子查询包裹,再对整体合并结果排序取最后10条:

SELECT *
FROM (
    -- table1与table2的关联查询
    SELECT t1.postID, 
           t1.status,
           t1.`number`, 
           t2.reference, 
           t2.joint_date
    FROM table1 t1 
    INNER JOIN table2 t2 ON t1.postID = t2.postID
    WHERE t1.active = 1 
      AND t1.userID = 3
    
    UNION ALL
    
    -- table3与table2的关联查询
    SELECT t3.postID, 
           t3.status,
           t3.`number`, 
           t4.reference, 
           t4.joint_date
    FROM table3 t3
    INNER JOIN table2 t4 ON t3.postID = t4.postID
    WHERE t3.active = 1 
      AND t3.userID = 3
) AS combined_result
-- 按需求排序取最后10条,示例按postID倒序,可根据业务调整排序字段
ORDER BY postID DESC
LIMIT 10;

补充说明

  • 若业务需要剔除两个查询结果中完全重复的行,将UNION ALL替换为UNION即可。
  • 排序字段可按需调整,比如要按创建时间取最新数据,可改为ORDER BY joint_date DESC。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:49:00