基于一些条件我们必须更改加入表

问题描述:

我正面临一个问题。我正在创建一个像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,根据条件它将从所需表中获取数据。

+0

该解决方案将取决于你所使用的数据库。 –

+0

你在四个不同的数据库系统中面临这个问题? – user272735

+0

我现在面临的DB2 – Rams

所以只是相对的条件加入两个:

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

+0

谢谢你这么多的问题...解决方案是工作的罚款......再次感谢各位 – Rams

+0

多了一个疑问,如果说不同的表是第一个表那么什么是它的解决方案... plz帮助。 – Rams

+1

@RameshYelda使用一个虚表的话..'SELECT * FROM(SELECT 1为Dummy_Col)Dummy_Table LEFT JOIN Varying_Table_1 ON(年= 2016)... LEFT JOIN Varying_Table_2 ON(年 2016)...' – sagi

你可以用它实现这样的,如果你使用的是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')