2016-03-03 51 views
-1

替換來自列值我有2代表具有以下結構:與另一列

tab1: 
| ID | Name | Col1 | 
|----|-------|------| 
| 1 | Peter | Null | 
| 2 | Lisa | Null | 
| 3 | Eddy | Null | 

tab2: 
| ID | Col1 | 
|----|------| 
| 1 | Abc | 
| 1 | Def | 
| 2 | Ghi | 

我想以這樣的方式加入這些表,從tab2col1所有值出現在tab1col1。所以col1應該只被替換:

| ID | Name | Col1 | 
|----|-------|------| 
| 1 | Peter | Abc | 
| 1 | Peter | Def | 
| 2 | Lisa | Ghi | 

它與right join

SELECT tab1.id, name, tab2.col1 FROM tab1 right Join tab2 On tab1.id=tab2.id 

但在這裏我指定我只想col1tab2出現,而不是從tab1。在實際情況下,還有很多列,我不想指定它們中的每一個。

那麼有沒有一種更通用的方法來替換tab1的列與tab2的相應列?

+0

只是一個提示,大多數人發現'左連接'比'右連接'更容易理解。切換到'tab2左加入tab1'將使代碼更容易理解和維護。 – jarlh

+0

指定每個列。 – Strawberry

+0

@Strawberry:這就是我想要避免的。查詢應該是通用的,所以用戶只需要指定第一個表(在這種情況下'tab1',但它也可以是任何其他表),而'tab2'永遠不會改變。 – user1170330

回答

0

你有沒有嘗試運行

SELECT tab1.ID, tab1.Name, tab2.* FROM tab1, tab2 WHERE tab1.ID=tab2.ID; 

應該這樣做

+0

結果與我的結果有什麼不同?在這種情況下,我還需要指定'tab2.col1'。 – user1170330

+0

結果沒有差異。你不是一樣嗎? –

+0

我想要相同的,但沒有明確指定'tab2.col1'。 – user1170330

0

使用內嵌視圖,您可以返回只是名稱和TAB1 ID,然後加入到表2,你就不要再然後是別名。因爲他們不會生成T1 ...

Select T1.*, T2.* from tab2 t2 
LEFT JOIN (Select ID, Name from tab1) T1 
on T1.ID = T2.ID 

Select * from tab2 t2 
RIGHT JOIN (Select ID, Name from tab1) T1 
on T1.ID = T2.ID