SELECT 语句返回不合格的列名
Posted
技术标签:
【中文标题】SELECT 语句返回不合格的列名【英文标题】:SELECT statement returning unqualified column names 【发布时间】:2013-09-14 15:49:56 【问题描述】:我在管理这样的查询时遇到了困难:
SELECT c.id, p.id FROM claim c, procedure p LIMIT 1;
此查询将返回以下集合:
id | id
----+----
49 | 1
有什么方法可以让它返回c.id
和p.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;
【问题讨论】:
【参考方案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;
【讨论】:
参见 PostgreSQL 文档中的 7.3.2. Column Labels。 谢谢!这就是我要找的东西!【参考方案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 resultUsing UNNEST with a JOIN
【讨论】:
我知道是的。但是,我没有设计数据库,也没有设计系统(并且已经使用了很长时间)。【参考方案3】:我认为这里缺少的最后一个答案是更正确的方法是使用括号 [ ]
SELECT c.id AS [c.id], p.id AS [p.id]
FROM claim c, procedure p LIMIT 1;
【讨论】:
以上是关于SELECT 语句返回不合格的列名的主要内容,如果未能解决你的问题,请参考以下文章
MySQL从具有列名的select语句中的列列表中返回第一个非NULL值
Python Pandas hdfstore 的 select(where='') 返回不合格的结果