将table1中的所有列连接到具有"唯一名称的列#34;在表2中

时间:2014-11-30 03:08:41

标签: mysql sql join

我正在使用mySQL 5.6。我有两个表:t1和t2。两者都有很多列。 t1和t2中的许多列共享相同的名称:例如,t1和t2中有一个“var1”列。

我想加入表格,选择(a)来自t1的所有列和(b)仅选择t2中名称未出现在t1中的列。例如,我不会从t2中选择“var1”。

这是一个有效的mySQL命令,它不起作用,因为有些列共享相同的名称:

SELECT * FROM t1 LEFT JOIN t2 ON (t1.ID=t2.ID);

MySQL明智地返回此错误消息:

ERROR 1060 (42S21): Duplicate column name 'var1'

所以我想运行像

这样的命令
SELECT t1.*, DISTINCTCOLUMNS(t2.*) FROM t1 LEFT JOIN t2 ON (t1.ID=t2.ID);

当然,除了SQL中没有DISTINCTCOLUMNS操作。但是有一个类似的(真实)命令会达到同样的效果吗?

我看到常见的建议是避免SELECT *语法,部分是为了提高效率。我很欣赏,但我不想写出我需要的所有列的名称。

3 个答案:

答案 0 :(得分:1)

这里真正的问题是两个表都有相同的列名。所以你需要为列添加别名..这也是为什么你不应该只删除所有列,而是你需要的那些列。

SELECT t1.ID as t1_id,
       t1.var1 as t1_var1,
       t2.ID as t2_id,
       t2.var1 as t2_var1,
       ... Etc.
FROM t1
LEFT JOIN t2 on t1.ID = t2.ID

有两个ID列,无法区分两者,会发生错误

答案 1 :(得分:0)

您可以对列进行限定,例如

SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON (t1.ID=t2.ID);

但除非名称相同的列实际上保存/引用相同的数据,否则不应该这样做。

答案 2 :(得分:0)

尝试如下。这可能会对你有所帮助

SELECT t1.*, t2.YourDesiredColumnName FROM t1 LEFT JOIN t2 ON (t1.ID=t2.ID);