使用相同的' WHERE' JOIN和UNION以及子查询的子句

时间:2018-03-13 10:43:48

标签: sql db2

是否可以为JOIN和UNION使用WHERE子句(如果它是相同的)。假设我有这样的查询:

Select 'some columns and formulas', T2.'some more columns' FROM table table1

LEFT Join 
(Select 'some columns and formulas' FROM select 
('some columns and  formulas' from table2 where DATE_COLUMN > '2018-01-01')) as T2 ON
(table1.ID = T2.ID)

where DATE_COLUMN > '2018-01-01'

Union 

select 'some columns and formulas' from table3 where DATE_COLUMN > '2018-01-01'

我是因为连接在子查询中我无法加入DATE_COLUMN ...实际上我被迫使用相同的where子句3次。我正在尝试准备一个.ODC文件供用户自己运行,我希望他们只修改一次日期标准,而不是3次。你的想法是什么。有可能这样吗?哦,如果这有任何不同,我正在使用DB2。

1 个答案:

答案 0 :(得分:2)

您可以在子查询中执行union,例如:

Select * 
from ((select 'some columns and formulas', T2.'some more columns'
        from table1 left Join 
      ) union 
      (select 'some columns and formulas'
       from table3
      )
     ) tt    
where DATE_COLUMN > '2018-01-01';

如果date_column不是所选列之一,则需要将其包含在子查询中。

如果date_column影响union的重复排除,则可以执行以下操作:

Select distinct . . . 
from ((select 'some columns and formulas', T2.'some more columns', date_column
        from table1 left Join 
      ) union all
      (select 'some columns and formulas', date_column
       from table3
      )
     ) tt    
where DATE_COLUMN > '2018-01-01';

但是,我建议您使用union all - 除非您特别想要产生删除重复项的开销。