与另一列

问题描述:

替换来自列值我有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

你有没有尝试运行

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

应该这样做

+0

结果与我的结果有什么不同?在这种情况下,我还需要指定'tab2.col1'。 – user1170330

+0

结果没有差异。你不是一样吗? –

+0

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

使用内嵌视图,您可以返回只是名称和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