示例表1:
id | field1 | field2
--------------------
表2:
id | id1 | field1 | field2
--------------------------
是否可以这样做:
select t1.*, t2.* from table1 t1 inner join table2 t2 on t1.id = t2.id1
并收到此结果:
t1_id | t1_fiedl1 | t1_field2 | t2_id | t2_id1 | t2_fiedl1 | t2_field2
----------------------------------------------------------------------
目标是让mysql自动为结果字段添加前缀,以避免长打字,例如
select t1.id as t1_id, t1.field1 as t1_field1
等等
答案 0 :(得分:4)
SQL引擎不会将您的查询重写为“auto-alias”字段 - 别名必须是显式的。
但是,客户端代码中有两个选项。
首先,您显然可以编写一个抽象,将查询拼凑在一起,并在执行此操作时提供别名。
其次,更容易,使用与每个结果集关联的基础MYSQL_FIELD结构中公开的信息。它们包含有关每个字段的字段和表名称(以及其他信息),允许您以编程方式将t1_field1
拼接在一起,而无需事先知道字段名称。如何公开此信息取决于您的特定客户端API。
答案 1 :(得分:2)
目标是让mysql自动为结果字段添加前缀,以避免长打字,例如
select t1.id as t1_id, t1.field1 as t1_field1 and so on
如果两个表上的字段名称相同,则不会从两个表中获取列 您必须使用特定别名编写列名来实现此目的。
例如
SELECT t1.id t1_id, t1.field1 t1_fiedl1, t1.field2 t1_field2
,t2.id t2_id, t2.id1 t2_id1 ,t2.field1 t2_fiedl1, t2.field2 t2_field2
FROM table1 t1
INNER JOIN table2 t2
ON t1.id = t2.id1
如果两个表上的字段名称不同,那么您可以这样做以获得所需的结果。
例如
SELECT t1.*, t2.*
FROM table1 t1
INNER JOIN table2 t2
ON t1.id = t2.id1;
答案 2 :(得分:0)
不,mysql不会自动为列添加前缀。您要做的唯一事情是在列周围手动添加alias
。如果您不想这样做,那么最好的方法是重命名从每个表中创建唯一名称的列。如果您不添加alias
,并且列中具有相同的名称,则趋势是将显示第一个表中的列。这是正常的,因为表之间存在名称冲突。
答案 3 :(得分:-1)
select t1.id as t1_id, t1.fiedl1 as t1_fiedl1 ,
t1.field2 as t1_field2 ,t2.id as t2_id ,
,t2.fiedl1 as t2_fiedl1 ,t2.field2 as t2_field2
from table1 t1 left outer join table2 t2 on t1.id = t2.id1