【问题标题】:SELECT statement returning unqualified column namesSELECT 语句返回不合格的列名
【发布时间】:2013-09-14 15:49:56
【问题描述】:

我在管理这样的查询时遇到了困难:

SELECT c.id, p.id FROM claim c, procedure p LIMIT 1;

此查询将返回以下集合:

 id | id
----+----
 49 |  1

有什么方法可以让它返回c.idp.id 作为列名?这个不行:

SELECT c.id as c.id, p.id as c.id FROM claim c, procedure p LIMIT 1;

或者这是我的最终解决方案?

SELECT c.id as c_id, p.id as p_id FROM claim c, procedure p LIMIT 1;

【问题讨论】:

    标签: sql postgresql naming-conventions alias


    【解决方案1】:
    SELECT c.id AS "c.id", p.id AS "p.id" FROM claim c, procedure p LIMIT 1;
    

    或者简单地说:

    SELECT c.id "c.id", p.id "p.id" FROM claim c, procedure p LIMIT 1;
    

    【讨论】:

    【解决方案2】:

    有了正确的命名约定,您一开始就很少需要处理这个问题。

    我建议改用这样的东西:

    CREATE TABLE claim (claim_id serial PRIMARY KEY, ...);
    
    CREATE TABLE procedure (procedure_id serial PRIMARY KEY, ...);
    

    "id" 是一个非常糟糕的选择列名。不幸的是,一些半机智的 ORM 使用这种反模式。尽可能避免它。

    相关:
    Join one to many and retrieve single result
    Using UNNEST with a JOIN

    【讨论】:

    • 我知道是的。但是,我没有设计数据库,也没有设计系统(并且已经使用了很长时间)。
    【解决方案3】:

    我认为这里缺少的最后一个答案是更正确的方法是使用括号 [ ]

    SELECT c.id AS [c.id], p.id AS [p.id]
    FROM claim c, procedure p LIMIT 1;
    

    【讨论】:

      猜你喜欢
      • 2014-01-18
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      相关资源
      最近更新 更多