是否可以为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。
答案 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
- 除非您特别想要产生删除重复项的开销。