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
相关产品推荐
相关产品推荐

