基于一些条件我们必须更改加入表
问题描述:
我正面临一个问题。我正在创建一个像Temp_district一样的过程。基于一些条件我们必须更改加入表
在有像基于某些条件下,我们必须改变连接表的要求。
like if(year=2016) then
select * from table1 a join table2 b on (a.id=b.id) join table3 c on (c.id=b.id) join table4 d on d.id=a.id
if(year<>2016) then
select * from table1 a join table2 b on (a.id=b.id) join table3 c on (c.id=b.id) join table5 e on d.id=a.id;
查询几乎是相同的,并且过分大的查询,在只有一个表得到改变,如果一年不2016这里即表4至表5
有没有像下面
if(year=2016) then
with temp_table_2016 (select * from table4)
else with temp_table_2016 (select * from table6)
任何事情
这样在单个查询中,我可以用temp_table_2016替换table4或table5,根据条件它将从所需表中获取数据。
答
所以只是相对的条件加入两个:
SELECT t.*,
COALESCE(t4.col,t5.col) as col,
COALESCE(t4.col2,t5.col2) as col2,
....
FROM t
LEFT JOIN t4 ON(t.id = t4.id AND year = 2016)
LEFT JOIN t5 ON(t.id = t5.id AND year <> 2016)
你需要的所有表列添加COALESCE()
,所以才有了相应的数据就会出现。如果你不在意,你可以选择他们两个,其中1个将始终为NULL
。
答
你可以用它实现这样的,如果你使用的是MSSQL:
DECLARE @secondtable NVARCHAR(20)
if(year=2016)
BEGIN
SET @secondtable = 'table4'
END
if(year<>2016)
BEGIN
SET @secondtable = 'table5'
END
EXEC('select * from table1 a join table2 b
on (a.id=b.id) join table3 c on (c.id=b.id) join '[email protected]+' d on d.id=a.id')
该解决方案将取决于你所使用的数据库。 –
你在四个不同的数据库系统中面临这个问题? – user272735
我现在面临的DB2 – Rams