合并共享列的多个表

时间:2017-10-19 22:04:35

标签: sql db2

我有一个这样的表格列表:

T1

ID | Name
3  | 'AAA'
4  | 'BBB'
5  | 'CCC'
6  | 'DDD'
7  | 'EEE'

T2

ID | Password
3  | 'test'
6  | 'password'

T3

ID | Birth Year | Last Name
4  | 1990 | 'John'
6  | 1988 | 'Megan'
7  |   -  | 'Bob'

T4

ID | Birth Year
7  |   1985

我想将它们全部合并到这里,注意到t3和t4都有出生年份列,但是这个值只有一个。

ID | Name  | Password | Birth Year | Last Name
3  | 'AAA' | 'test'   |      -     |      -
4  | 'BBB' |    -     |     1990   | 'John'
5  | 'CCC' |    -     |      -     |      -
6  | 'DDD' |'password'|     1988   | 'Megan'
7  | 'EEE' |    -     |     1985   | 'Bob'

有谁知道如何做到这一点? t1是“主”表,因此它将始终包含所有ID。

我试过了:

select * \
from t1 \
LEFT outer join t2 on t1.ID = t2.ID \
LEFT outer join t3 on t1.ID = t3.ID \
LEFT outer join t4 on t1.ID = t4.ID 

但它无法正常工作,它为t1,t2,t3,t4中的每个列都有单独的列

2 个答案:

答案 0 :(得分:0)

你可以选择性地将t4连接到t1,然后显示t4.BirthYear如果它不为null,否则为t3.BirthYear。像这样:

SELECT t1.ID, t1.Name, t2.Password, COALESCE(t4.BirthYear, t3.BirthYear) as BirthYear, t3,LastName
FROM t1
 LEFT OUTER JOIN t2 on t1.ID = t2.ID
 LEFT OUTER JOIN t3 on t1.ID = t3.ID
 LEFT OUTER JOIN t4 on t1.ID = t4.ID and t4.BirthYear is NOT NULL

答案 1 :(得分:0)

select t1.ID,
t1.Name,
t2.Password,
COALESCE(t3.[Birth Year],t4.[Birth Year]), t3.[Last Name]
from t1 
LEFT outer join t2 on t1.ID = t2.ID 
LEFT outer join t3 on t1.ID = t3.ID 
LEFT outer join t4 on t1.ID = t4.ID