按编号(索引)引用列

时间:2014-05-18 05:54:33

标签: sql postgresql select postgresql-9.2

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

select 1 from "user"
select '1' from "user"

但他们没有做我期望的事。

3 个答案:

答案 0 :(得分:12)

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

SELECT   col1, col2, col3
FROM     my_table
ORDER BY 1

编辑:
一个警告是将order by <some index>select *结合使用,这可能看起来好像索引与表中列的顺序相关。但是,*首先会扩展为包含所有列,然后才会应用order by子句。所以最终,它确实引用了select列表而不是表的实际结构。

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

SELECT   col1, COUNT(*)
FROM     my_table
GROUP BY 1

答案 1 :(得分:2)

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

SELECT uno FROM _your_table_ as t(uno);

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

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

SELECT "1" FROM _your_table_ as t("1");

双引号...很丑,但是行得通!!!!

答案 2 :(得分:1)

在PostgreSQL中有几种方法可以做到这一点。最简单的(我认为)是创建一个&#34;功能&#34;。深入了解PG手册,了解工作示例。这很容易。您可以选择各种语言。这里的行是针对pl / pgsql的,但你会得到这个想法:

首先从系统目录中检索列名,执行以下操作:

attname := select distinct attname from pg_attribute,pg_class where attrelid = pg_class.oid and attnum = 1 and pg_class.relname='user';

然后将它连接成一个SQL语句:

EXECUTE 'SELECT ' || attname || ' FROM ...