2012-11-15 77 views
3

是否有可能做這樣的事情(顯然這句法不工作):MySQL:從昏迷分隔列表/列表中選擇表格作爲表格? 「選擇FROM(1,2,3)」

SELECT a FROM (1, 2, 3) 

得到這個:

| a | 
+---+ 
| 1 | 
| 2 | 
| 3 | 

這就是我想從昏迷分隔列表中刪除行,而不使用任何表,或者至少沒有在db中創建表(也許這可能使用類似臨時表的東西嗎?)。

也許有可能獲得給定值的列而不使用select,也就是使用其他一些sql語句?如果它在MySQL中不可行,但在其他一些SQL中可能,那麼知道它仍然很有趣。

+0

對不起,就不能 –

+1

@SashiKant幾千別人做不到的,以及... – glglgl

回答

7
SELECT 1 a UNION ALL SELECT 2 a UNION ALL SELECT 3 a; 
+0

非常甜,很好的主意,雖然語句變得有點長:)不過我相信你很可能有一個接受的答案! :) – morphles

+0

@aykut:因爲你不消除任何重複,我會建議使用'聯盟所有'而不是'聯盟' – Arion

+0

@morphles,你能給你一個你想要的場景嗎?我沒有弄清楚你的問題:/ – aykut

1

臨時表是一個選項嗎?然後,我將有一個建議,其中,無可否認,有超過1個查詢:

-- DROP TEMPORARY TABLE tmp_list IF EXISTS; 
CREATE TEMPORARY TABLE tmp_list (a INT); 
INSERT INTO tmp_list (a) VALUES (1), (2), (3); 
SELECT a FROM tmp_list; 
2

如果它是不可能在MySQL,但有可能在其他一些SQL它仍然將是有趣的瞭解。

在標準的SQL,這將是這樣的

select * 
from (values (1), (2), (3)) t 

這個工程至少在PostgreSQL和DB2。

在PostgreSQL中,您可以通過擴展別名(不確定該列別名是否爲SQL標準的一部分)來爲該列提供名稱。

select * 
from (values (1), (2), (3)) t (id) 

以下是使用公共表格表達式的替代方案。

with my_values (id) as (
    values (1), (2), (3) 
) 
select * 
from my_values;