2013-06-04 68 views
0

中查詢,如果我有4個表是這樣的:如何分支多個表

1- mainemployees 

emp_id 
email 
type (0-->ext,1-->internal,2--->special) 

2-externalemp 

emp_id 
name 

3-internalemp 

emp_id 
name 

4-specialemp 

emp_id 
name 

現在我希望所有的employee names ,其中第一表的emp_id =最後三張表 之一的emp_id如何做到這一點(性能明智)。

回答

1
select nvl(ee.name, nvl(ie.name, se.name)) 
from mainemployees me 
left join 
     externalemp ee 
on  ee.emp_id = me.emp_id 
left join 
     internalemp ie 
on  ie.emp_id = me.emp_id 
left join 
     specialem se 
on  se.emp_id = me.emp_id 
where nvl(ee.name, '') <> '' 
     or nvl(ie.name, '') <> '' 
     or nvl(se.name, '') <> '' 
+0

是什麼在'informix'的替代'coalesce'因爲我得到的語法錯誤,當我嘗試這種方法。 –

+1

Informix似乎使用'nvl'作爲'coalesce'替代 – Andomar

+0

,但是當我使用'NVL'時,它需要兩個參數而不是三個參數 –

1
create table mainemployees (emp_id int, emp_type int) 

create table externalemp (emp_id int, name nvarchar(20)) 

create table internalemp (emp_id int, name nvarchar(20)) 

create table specialemp (emp_id int, name nvarchar(20)) 

insert into mainemployees (emp_id, emp_type) values (1, 0), (2, 1), (3, 2) 

insert into externalemp (emp_id, name) values (1, 'external') 
insert into internalemp (emp_id, name) values (2, 'internal') 
insert into specialemp (emp_id, name) values (3, 'special') 

而對於查詢使用CASE選擇右列

SELECT 
    CASE me.emp_type WHEN 0 THEN ee.name WHEN 1 THEN ie.name WHEN 2 THEN se.name END 
FROM mainemployees as me 
LEFT JOIN externalemp as ee ON me.emp_id = ee.emp_id 
LEFT JOIN internalemp as ie ON me.emp_id = ie.emp_id 
LEFT JOIN specialemp as se ON me.emp_id = se.emp_id