【问题标题】:have mysql select statement return fully qualified column names like table.field让 mysql select 语句返回完全限定的列名,如 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", ...

【问题讨论】:

    标签: sql mysql


    【解决方案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
        

        【讨论】:

          猜你喜欢
          • 2014-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-08
          • 2022-01-21
          • 2010-10-18
          相关资源
          最近更新 更多