Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将列中的值替换为另一列_Mysql_Sql_Join - Fatal编程技术网

Mysql 将列中的值替换为另一列

Mysql 将列中的值替换为另一列,mysql,sql,join,Mysql,Sql,Join,我有两个表,结构如下: tab1: | ID | Name | Col1 | |----|-------|------| | 1 | Peter | Null | | 2 | Lisa | Null | | 3 | Eddy | Null | tab2: | ID | Col1 | |----|------| | 1 | Abc | | 1 | Def | | 2 | Ghi | 我希望以这样的方式连接这些表,即tab2中col1的所有值都出现在tab1的col1中。

我有两个表,结构如下:

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

tab2:
| ID | Col1 |
|----|------|
| 1  | Abc  |
| 1  | Def  |
| 2  | Ghi  |
我希望以这样的方式连接这些表,即
tab2
col1
的所有值都出现在
tab1
col1
中。因此,只需更换
col1

| ID | Name  | Col1 |
|----|-------|------|
| 1  | Peter | Abc  |
| 1  | Peter | Def  |
| 2  | Lisa  | Ghi  |
它与右连接一起工作:

SELECT tab1.id, name, tab2.col1 FROM tab1 right Join tab2 On tab1.id=tab2.id
但是在这里我指定我只想显示
tab2
中的
col1
,而不是
tab1
。在实际情况中,有更多的列,我不想一一指定

那么,是否有更通用的方法将
tab1
的列替换为
tab2
的相应列?

您尝试运行了吗

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

这应该可以做到

使用内联视图,您可以只从tab1返回name和ID,然后连接到表2,这样就不必为columnsn加别名了。因为它们不在生成的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

只是一个提示,大多数人发现
左连接
右连接
更容易理解。切换到
tab2 left join tab1
将使代码更易于理解和维护。请指定您的每一列。@草莓:这就是我试图避免的。查询应该是泛型的,因此用户只需要指定第一个表(在本例中为
tab1
,但它也可以是任何其他表),而
tab2
从不更改。如果在您加入的表中有同名的列,则必须显式指定这些列的表名,否则您将得到“Ambigous column name”否则会出错。您是想节省用户时间还是自己打字时间?您可以使用
合并(tab1.col1,tab2.col1)作为col1
。。。如果col1有数据,以这种方式返回第一个非空值,它将使用它,否则它将使用tab.col you sepcify。结果与我的结果有何不同?在这种情况下,我还需要指定
tab2.col1
。结果没有差异。您不想要相同的吗?我想要相同的,但没有明确指定
tab2.col1