让 mysql select 语句返回完全限定的列名,如 table.field

Posted

技术标签:

【中文标题】让 mysql select 语句返回完全限定的列名,如 table.field【英文标题】:have mysql select statement return fully qualified column names like table.field 【发布时间】:2008-11-06 11:02:08 【问题描述】:

有没有办法让 mysql select 语句返回完全限定的列名,如“table.field”,而不对每个字段都使用 AS?

像这样:

SELECT * 
FROM  table1  
LEFT JOIN table2 on table1.f_ID = table2.ID  

结果将是: "table1.ID", "table1.name", "table2.ID", "table2.name", ...

【问题讨论】:

【参考方案1】:

如果您使用的是 php,则可以使用 PDO 来获得此结果。

$PDO->setAttribute(PDO::ATTR_FETCH_TABLE_NAMES, true);

更多信息请参见SQL Select * from multiple tables。

【讨论】:

【参考方案2】:

不是真的。您可以编写一些动态 SQL 来完成此操作,但这并不简单。如果您真的想要动态 SQL,请告诉我,我可以尝试制作一些东西。

【讨论】:

【参考方案3】:

你也可以这样写:

   SELECT table1.*, table2.*
     FROM table1 
LEFT JOIN table2 on table1.f_ID = table2.ID

如果您想要所有列,则无需指定每一列

【讨论】:

我在 SQLite3 数据库上试过这个,但它没有完全限定列名。尽管 OP 询问了 MySQL,但我认为这值得一提。 @BenjaminOakes 只有两个(SQLite)PRAGMA 已被弃用... full_column_names 和 short_column_names。 link【参考方案4】:

在语句中使用完全限定的字段名称将在结果集中产生完全限定的字段名称。

SELECT table1.ID, table1.name, table2.ID, table2.name
FROM table1 
LEFT JOIN table2 on table1.f_ID = table2.ID

我意识到您希望摆脱的负担是手动执行此操作。但是,如果您的应用程序对数据库的布局有任何了解,则可以在应用程序内动态生成它。

只要我的 2 美分

【讨论】:

这不适用于 MySQL。您仍然得到列名,而不是 table.column 名称。【参考方案5】:
select  table1.* , table1='<======'

        table2.* , table2='<======'

from  table1  

    left join table2 on table1.f_ID = table2.ID

【讨论】:

以上是关于让 mysql select 语句返回完全限定的列名,如 table.field的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 视图触发器函数存储过程

MySQL数据库 (下)

6)-MySQL复制表

MySQL必知必会---检索数据

MySQL---查询性能优化

存储过程中的 MySQL select 语句返回的结果与 proc 外部不同