Union或更好的SQL查询连接到具有类似表的结果集的方法

Union或更好的SQL查询连接到具有类似表的结果集的方法,sql,Sql,我有一个查询,其中我使用union连接两个数据集,有许多类似的表连接。两个查询之间唯一的区别是两个关系表section\u view\u reltns和element\u section\u reltns和graph\u view\u reltns和graph\u element\u reltns,它们在cv.orig\u charting\u view\u id上开始联接 我非常感谢您的帮助,我想知道是否有更好的方法来编写此文档以提高查询性能 select cv.orig_charting_v

我有一个查询,其中我使用union连接两个数据集,有许多类似的表连接。两个查询之间唯一的区别是两个关系表
section\u view\u reltns和element\u section\u reltns
graph\u view\u reltns和graph\u element\u reltns
,它们在cv.orig\u charting\u view\u id上开始联接

我非常感谢您的帮助,我想知道是否有更好的方法来编写此文档以提高查询性能

select cv.orig_charting_view_id, cvt.view_name, cvt.view_label, cv.version, ce.orig_charting_element_id, ce.version, cet.element_name, cet.element_label, ce.element_type, ce.element_type_meaning, ce.beg_effective_dt_tm
from charting_views cv
inner join charting_view_translations cvt ON cvt.charting_view_id = cv.charting_view_id
inner join section_view_reltns scr ON scr.orig_charting_view_id = cv.orig_charting_view_id and scr.charting_view_version = cv.version
inner join element_section_reltns esr ON esr.orig_charting_section_id = scr.orig_charting_section_id and esr.charting_section_version = scr.charting_section_version
inner join charting_elements ce ON ce.orig_charting_element_id = esr.orig_charting_element_id and ce.version = esr.charting_element_version
inner join charting_element_translations cet ON cet.charting_element_id = ce.charting_element_id
where cv.end_effective_dt_tm > NOW() and cv.status = 2
and cet.locale='en-US'
and ce.end_effective_dt_tm > NOW() and ce.status = 2
union
select cv.orig_charting_view_id, cvt.view_name, cvt.view_label, cv.version, ce.orig_charting_element_id, ce.version, cet.element_name, cet.element_label, ce.element_type, ce.element_type_meaning, ce.beg_effective_dt_tm
from charting_views cv
inner join charting_view_translations cvt ON cvt.charting_view_id = cv.charting_view_id
inner join graph_view_reltns gvr ON gvr.orig_charting_view_id = cv.orig_charting_view_id
inner join graph_element_reltns ger ON ger.graph_id = gvr.orig_graph_id and ger.graph_version = gvr.graph_version
inner join charting_elements ce ON ce.orig_charting_element_id = ger.element_id and ce.version = ger.charting_element_version
inner join charting_element_translations cet ON cet.charting_element_id = ce.charting_element_id
where cv.end_effective_dt_tm > NOW() and cv.status = 2
and ce.end_effective_dt_tm > NOW() and ce.status = 2
and cet.locale='en-US'
;

通常,您应该选择
union all
,而不是
union
,以增强查询性能,并在必要时使用
group by
将查询括起来。您可能可以使用外部联接将其合并到单个查询中,以实现差异和一些附加过滤。