8

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

4 回答 4

4

SQL 引擎不会为您将查询重写为“自动别名”字段——别名必须是明确的。

但是,您在客户端代码中有两个选项。

首先,您显然可以编写一个抽象,将查询拼凑在一起并在这样做时提供别名。

其次,更容易的是使用与每个结果集关联的底层MYSQL_FIELD结构中公开的信息。这些包含有关每个字段的字段和表名称(以及其他信息),允许您以t1_field1编程方式拼接在一起,而无需事先知道字段名称。此信息的公开方式取决于您的特定客户端 API。

于 2012-10-31T12:59:23.700 回答
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

请参阅此 SQLFiddle 演示

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

例如

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

看到这个 SQLFiddle

于 2012-10-31T12:36:22.837 回答
0

不,mysql 不会自动为列添加前缀。您唯一要做的就是alias在列周围手动添加一个。如果您不想这样做,那么最好的方法是重命名从每个表中生成唯一名称的列。如果您不添加alias,并且存在具有相同名称的列,则趋势是显示第一个表中的列。这是正常的,因为表之间的名称冲突。

于 2012-10-31T13:01:25.713 回答
-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
于 2012-10-31T12:30:32.587 回答