有没有办法创建视图或仅从两个表中的一个中选择一条记录,这两个表的列略有不同,使用 union 和whenexists

问题描述 投票:0回答:1

有没有办法创建视图或 使用 union 和when contains 或任何其他更简单的方式仅从具有稍微不同列的两个表之一中选择一条记录?

如果可能的话,我尝试在一个查询中完成此操作,而不是运行两个单独的查询。

例如,有标准和异常/覆盖表:

`select
   override_salary_num as overrideSalaryNumber
   effective_start_dte as effectiveStartDate,
   effective_end_dte as effectiveEndDate,
   employee_Id as employeeId,
   null as employeeRole,
   null as employeeRoleType,
   bonus_rate as bonusRate,
   base_salary as baseSalary,
   merit_increase_Rate as meritRate       
from
  employee_salary_override a
  WHERE a.employee_Id in (1) 
and a.effective_start_dte  <= '2023-12-01' 
and a.effective_end_dte>='2023-12-01'
UNION 
select
   standard_salary_num as standardSalaryNumber,
   effective_start_dte as effectiveStartDate,
   effective_end_dte as effectiveEndDate,
   null as employeeId,
   b.employee_Role_Number as employeeRole,
   1 as employeeRoleType,
   bonus_rate as bonusRate,
   base_salary as baseSalary,
   merit_increase_Rate as meritRate
from
   employee_standard_salary b
where b.employee_Role_Number=5
AND b.effective_start_dte <= '2023-12-01'
AND b.effective_end_dte >= '2023-12-01'
AND NOT EXISTS  
(select * from employee_salary_override c
where a.employee_Id in (1) 
and a.effective_start_dte  <= '2023-12-01' 
and a.effective_end_dte>='2023-12-01'
);`

当前使用两个单独的查询,希望派生出一个在不影响性能的情况下工作的单个查询。除了开始日期和结束日期之外,两个表之间没有任何共同点,这使得使用 union all 变得很棘手`

sql
1个回答
0
投票

通过在两个表的选择部分添加一个 order 列,然后在应用 order by 后仅从联合中选择第一条记录来解决此问题。

© www.soinside.com 2019 - 2024. All rights reserved.