我想使用列的索引(数字)执行选择。我试过了:
select 1 from "user"
select '1' from "user"
但他们没有做我期望的事。
答案 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 ...