我正在使用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 *
语法,部分是为了提高效率。我很欣赏,但我不想写出我需要的所有列的名称。
答案 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);