2015年6月28日 星期日

SQL練習:JOIN & Sub-Query & UNION

PTT DataBase版 JOIN問題#187hJHTs

table A : PK->ID

ID  name  money
---------------
AA  abc   10
BB  bcd   20

table B : PK -> ID

ID  b_money
------------
AA  30
CC  20

期望結果:

ID  name  money  b_money
--------------------------
AA  abc   10     30
BB  bcd   20     NULL
CC  NULL  NULL   20


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
--創建測試資料表
CREATE TABLE Table_A
	(
	ID varchar(10) NULL,
	NAME varchar(10) NULL,
	a_MONEY int NULL
	)  ON [PRIMARY]

	insert into Table_A(ID,NAME,a_MONEY) values ('AA','abc',10)
	insert into Table_A(ID,NAME,a_MONEY) values ('BB','bcd',20)

CREATE TABLE Table_B
	(
	ID varchar(10) NULL,
	b_MONEY int NULL
	)  ON [PRIMARY]

	insert into Table_B(ID,b_MONEY) values ('AA',30)
	insert into Table_B(ID,b_MONEY) values ('CC',20)

解法

將Table_A和Table_B的ID做聯集(UNION),找出ID

將Table_A、Table_B併入Table_C


1
2
3
4
5
6
7
select Table_C.ID,NAME,a_MONEY,b_MONEY

from(	
select ID from Table_A
UNION select ID from Table_B) as Table_C	--將Table_A和Table_B的ID做聯集UNION
left outer join Table_A ON Table_C.ID=Table_A.ID	--將Table_A併入Table_C
left outer join Table_B ON Table_C.ID=Table_B.ID	--將Table_B併入Table_C

沒有留言:

張貼留言