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

Oracle SQL中如何按日期(BASHO)合并三张相扑结果表并排序?

相扑比赛结果表合并与排序问题

需求:合并sumo_2019、sumo_2018、sumo_2017三张相扑比赛结果表,筛选出Rikishi1_ID=12191的数据,并按BASHO日期从2019年开始降序排序,在Oracle Apex中操作时遇到排序报错。

尝试过的SQL写法及报错信息

写法一

Select a.* from sumo_2019 a
where a.Rikishi1_ID=12191
order by a.BASHO
Union
Select b.* from sumo_2018 b
where b.Rikishi1_ID=12191
order by b.BASHO
Union
Select c.* from sumo_2017 c
where c.RIKISHI1_ID=12191
Order by c.BASHO

报错:ORA-00933: SQL command not properly ended

写法二

Select a.* from sumo_2019 a
where a.Rikishi1_ID=12191
Union
Select b.* from sumo_2018 b
where b.Rikishi1_ID=12191
Union
Select c.* from sumo_2017 c
where c.RIKISHI1_ID=12191
Order by BASHO

报错:ORA-00904: "BASHO": invalid identifier

问题分析与解决方法

错误原因

  1. 写法一错误:在UNION操作中,每个单独的SELECT语句不能添加ORDER BY,只有当所有SELECT语句合并完成后,才能对整个结果集进行排序。
  2. 写法二错误:ORA-00904表示BASHO不是有效标识符,可能是以下原因:
    • 某张表中不存在BASHO列,或列名拼写/大小写不一致(比如部分表中列名为小写basho,Oracle区分大小写时需要用双引号包裹);
    • 使用SELECT *时,合并后的结果集列名以第一个SELECT的列名为准,若第一张表的BASHO列存在命名差异,会导致识别失败。

正确SQL写法

方式一:子查询包裹后统一排序(推荐)

确保三张表的列结构完全一致(数量、顺序、数据类型),用子查询先合并数据,再对整体结果排序:

SELECT *
FROM (
    SELECT * FROM sumo_2019 WHERE Rikishi1_ID = 12191
    UNION
    SELECT * FROM sumo_2018 WHERE Rikishi1_ID = 12191
    UNION
    SELECT * FROM sumo_2017 WHERE RIKISHI1_ID = 12191
)
ORDER BY BASHO DESC;

方式二:显式指定列名(避免歧义)

如果不确定三张表列名是否完全匹配,显式列出需要的列,确保BASHO列在每张表中都存在且拼写正确:

SELECT BASHO, Rikishi1_ID, 列名3, 列名4... -- 补充所有需要的列
FROM (
    SELECT BASHO, Rikishi1_ID, 列名3, 列名4... FROM sumo_2019 WHERE Rikishi1_ID = 12191
    UNION
    SELECT BASHO, Rikishi1_ID, 列名3, 列名4... FROM sumo_2018 WHERE Rikishi1_ID = 12191
    UNION
    SELECT BASHO, RIKISHI1_ID, 列名3, 列名4... FROM sumo_2017 WHERE RIKISHI1_ID = 12191
)
ORDER BY BASHO DESC;

补充说明

  • 如果三张表的数据无重复,建议用UNION ALL替代UNION,执行效率更高(UNION会自动去重,UNION ALL不会);
  • 若BASHO是日期类型,ORDER BY BASHO DESC会自动从最新日期(2019年)开始降序排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:10:32