2015-02-09 41 views
1

在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中來命名這種「子查詢」欄目?

回答

1

通過值創建的列有,你會不會想用(儘管這是可能的)名稱:

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