按编号(索引)引用列

アレッ*_*ックス 8 sql postgresql select postgresql-9.2

我想使用列的索引(数字)执行选择.我试过了:

select 1 from "user"
select '1' from "user"
Run Code Online (Sandbox Code Playgroud)

但他们不按我的意愿行事.

Mur*_*nik 14

你不能在postgres中这样做.选择文字(例如1'1')只会返回其值.允许这样的索引的唯一地方是在order by子句中,即使在那里,它们也与表中列的顺序无关,而是在选择列表中:

SELECT   col1, col2, col3
FROM     my_table
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)

编辑:
一个警告是order by <some index>结合使用select *,这似乎与索引相关的表中的列顺序.但是,*首先将其展开以包含所有列,然后才order by应用该子句.所以最终,它确实引用了select列表而不是表的实际结构.

EDIT2:
正如@klin所提到的,postgres' group by子句也允许索引:

SELECT   col1, COUNT(*)
FROM     my_table
GROUP BY 1
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的回应,很说明性,但它是不正确的。可以使用别名。就像@BernardoJerez 在另一个答案中所说的那样。 (2认同)

小智 8

当我需要 FIRST 列(并且我不知道列名)时,我会执行以下操作:

SELECT uno FROM _your_table_ as t(uno);
Run Code Online (Sandbox Code Playgroud)

只需为表和列使用别名!..

如果你真的需要数字 1,你可以这样写:

SELECT "1" FROM _your_table_ as t("1");
Run Code Online (Sandbox Code Playgroud)

双引号......丑陋,但有效!!!!