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.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;

【问题讨论】:

【参考方案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='') 返回不合格的结果

SQL Server,临时表,SELECT 语句不起作用

SQL-如果指定值存在返回1,如果不存在返回0的SQL语句

H2 列名选择返回不正确的列名; “未找到列“OUT_ID”;SQL 语句:”

oracle中如何只查询一条复合条件的记录,即查到一条记录就返回