2017-09-06 104 views
0

我在下面写了查询作为更大查询的一部分来创建一个表。由于我是SQL新手,这是以一种非常循序渐进的方式完成的,因此我可以轻松理解查询中的各个步骤以及每个部分正在做什么。什么是合并下面两个查询的最佳方式

但是,我现在的任务是通过将它们结合在一起来使查询的下面两部分更加高效,这就是我奋斗的地方。

我觉得我应该创建一个表而不是2,并且单个表应该包含我需要的所有列/值。但是,我完全不确定发生这种情况所需的语法或我需要重新编写查询的顺序。

有人能提供任何建议吗?

非常感谢

sys_type as (select nvl(dw_start_date,sysdate) date_updated, id, descr 
from scd2.scd2_table_a 
inner join year_month_period 
on 1=1 
WHERE batch_end_date BETWEEN dw_start_date and NVL(dw_end_date,sysdate)), 

sys_type_2 as (select -1 as sys_typ_id, 
'Unassigned' as sys_typ_desc, 
sysdate as date_updated 
from dual 
union 
select id as sys_typ_id, descr as sys_typ_desc, date_updated 
from sys_type), 
+0

标签您正在使用的数据库管理系统。 (有些产品特定的SQL有。) – jarlh

+0

对不起,我不知道你的意思 – mrochester

+0

我的意思是:哪个数据库产品ct你在用吗? – jarlh

回答

0

假设你正在使用Oracle数据库,查询上述显得精致。我认为只是通过“加入”它们可以使它们更有效率(这里加入的定义非常松散。是否存在性能问题?

我认为,通过调整第一个内嵌查询“sys_type” 。

你有一个笛卡儿积在那里。你需要吗?你为什么不把条件在where子句中的加入条款? 基本上

sys_type as (select nvl(dw_start_date,sysdate) date_updated, id, descr 
from scd2.scd2_table_a 
inner join year_month_period 
on (batch_end_date BETWEEN dw_start_date and NVL(dw_end_date,sysdate))) 
相关问题