SQLite的:如何在“价值”的子查询名称的列

问题描述:

在postgres的我可以说:SQLite的:如何在“价值”的子查询名称的列

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 

很明显,通常的子选择(例如, “(选择... as a,... as b from ...)as foo”)你可以简单地命名每个字段。

唯一的简单的解决方法我发现名字列在这种情况下是做一个像工会:

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

有没有更好的方式SQLite中来命名这种“子查询”栏目?

通过值创建的列有,你会不会想用(尽管这是可能的)名称:

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前缀'真实'SELECT更好的方法。

+0

嗯,我明白了,所以我的专栏实际上可以通过“” - 很好。然后重命名的唯一方法可能是再选择一个级别(不是一个巨大的,考虑到你不会使用“值”与一个巨大的列表) sqlite>选择“”作为col1,“:1”作为col2, “(2)”作为col3 from(values(1,2,3)); 或工会。 清除。谢谢。 – 2015-02-09 18:35:54