SQLite:如何命名"值"中的列。子查询

时间:2015-02-09 18:24:47

标签: sqlite

在postgres中,我可以说:

test=# select * from (values(1),(3),(7)) as foo(id);
 id
----
  1
  3
  7
(3 rows)

这意味着这样的子选择随后可以使用foo.id等与其他表连接。

在sqlite中我可以说:

sqlite> select * from (values(1),(3),(7)) as foo;

----------
1
3
7

但如果我说foo(id)我会收到错误:

sqlite> select * from (values(1),(3),(7)) as foo (id);
Error: near "(": syntax error

显然,对于通常的子选择(例如“(选择......作为a,...作为b来自...)作为foo”),你可以简单地命名每个字段。

我发现在这种情况下命名列的唯一简单解决方法是执行类似的联合:

sqlite> select * from (select 1 as id where 1=0 union values(1),(3),(7)) foo;
id        
----------
1         
3         
7         

有没有更好的方法在SQLite中为这种“子选择”命名列?

1 个答案:

答案 0 :(得分:3)

VALUES创建的列具有您不想使用的名称(尽管可能):

sqlite> .mode columns
sqlite> .header on
sqlite> select * from (values(1,2,3));
            :1          :2        
----------  ----------  ----------
1           2           3         
sqlite> select "", ":1", ":2" from (values(1,2,3));
            :1          :2        
----------  ----------  ----------
1           2           3         

这不能改变;没有比使用UNION ALL为“真正的”前缀加上前缀更好的方法了。