2010-09-01 63 views
4

假設我有兩個表:如何製作一個「覆蓋」另一個表格?

CREATE TABLE A(
    id INT PRIMARY KEY, 
    x INT, 
    y INT 
) 

CREATE TABLE B(
    id INT PRIMARY KEY, 
    x INT, 
    y INT, 
) 

表A中包含的數據來自其他供應商的帶來而表B是我們的數據。爲了簡單起見,我已經使這些表在模式方面完全相同,但是表B可能是表A的超集(它將包含表A不會換句話說的一些列)。

我想要做的是創建一個視圖C列id,x和y,使得值來自表B,除非他們是NULL,在這種情況下,他們將來自表A.例如,假設我有以下幾點:

INSERT INTO A (id, x, y) 
VALUES (1, 2, 3); 

INSERT INTO B (id, x, y) 
VALUES (1, NULL, NULL); 

INSERT INTO A (id, x, y) 
VALUES (2, 3, 4); 

INSERT INTO B (id, x, y) 
VALUES (2, 5, 6); 

INSERT INTO A(id, x, y) 
VALUES (3, 4, 5); 

INSERT INTO B(id, x, y) 
VALUES (3, 5, NULL); 

所以,如果我SELECT * FROM C,我會得到以下行:

(1, 2, 3) 
(2, 5, 6) 
(3, 5, 5) 

我怎麼能創造這樣的看法?

回答

6

你可以用left join加入表一起,然後選擇正確的列case

select case when A.x is null then B.x else A.x end 
,  case when A.y is null then B.y else A.y end 
from A 
left join 
     B 
on  A.id = b.id 
+3

或者使用COALESCE(如果你被允許做在一個視圖中,我不知道)。 – Hammerite 2010-09-01 22:00:01

+0

是的 - 你應該可以在視圖中合併。 – user158017 2010-09-02 00:02:59

+1

從這個問題來看,默認值應該是** B **,而不是A. – 2010-09-02 12:24:16

4

嘗試:

Create view C as 
select B.ID, 
     coalesce(B.x,A.x) x, 
     coalesce(B.y,A.y) y 
from B 
left join A 
on B.ID = A.ID 
相關問題