Mysql自动为字段添加前缀

时间:2012-10-31 12:28:02

标签: mysql sql

示例表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

等等

4 个答案:

答案 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

See this SQLFiddle Demo

如果两个表上的字段名称不同,那么您可以这样做以获得所需的结果。

例如

SELECT     t1.*, t2.*
FROM       table1 t1 
INNER JOIN table2 t2 
        ON t1.id = t2.id1;

See this SQLFiddle

答案 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