2012-03-01 56 views
13

在MySql中有沒有辦法創建一個內聯表來用於連接?Mysql:在select語句內創建內聯表?

喜歡的東西:

SELECT LONG [1,2,3] as ID, VARCHAR(1) ['a','b','c'] as CONTENT 

那會輸出

| ID | CONTENT | 
| LONG | VARCHAR(1)| 
+------+-----------+ 
| 1 | 'a' | 
| 2 | 'b' | 
| 3 | 'c' | 

而且,我可以在使用連接這樣的:

​​3210

我知道我可以做

SELECT 1,'a' UNION SELECT 2,'b' UNION SELECT 3,'c' 

但是,這似乎很邪惡

我不想做一個存儲過程,因爲潛在的a,b,c可以改變每個查詢和數據的大小。另外一個存儲過程需要保存在數據庫中,我不想只爲此修改數據庫。 查看是同樣的事情。

我真正在尋找的是SELECT 1,'a' UNION SELECT 2,'b' UNION SELECT 3,'c',它有更好的語法。

+0

似乎是一個明顯用例的簡單概念。我也需要找到這樣的東西。 – 2012-06-13 22:15:12

+0

你有沒有找到解決方案?我很好奇 – 2014-05-28 02:21:40

+0

@FernandoCarvalhosa:沒關係,看起來沒有工會就不能完成 – 2014-05-28 18:02:24

回答

-1

是的。用stored proceduresviews

+0

這對我來說似乎是一種太沉重的解決方法...(請參閱問題中的編輯) – 2012-03-01 17:04:37

4

我現在記住的唯一方法是使用UNION或創建TEMPORARY TABLE並將這些值插入它。它適合你嗎?


TEMPORARY_TABLE(測試和它的工作原理):

創建:

CREATE TEMPORARY TABLE MyInlineTable (id LONG, content VARCHAR(1)); 

INSERT INTO MyInlineTable VALUES 
(1, 'a'), 
(2, 'b'), 
(3, 'c'); 

用法:

SELECT 
    MyTable.*, 
    MyInlineTable.CONTENT 
FROM 
    MyTable 
    JOIN 
    SELECT * FROM MyInlineTable; 
    ON MyTable.ID = MyInlineTable.ID 

TEMPORARY_TABLES一生(reference)

:外出時的範圍

臨時表會自動刪除,除非它們已經被明確使用DROP TABLE下降。

所有其他本地臨時表在當前會話結束時自動刪除。

當創建該表的會話結束並且所有其他任務已停止引用它們時,將自動刪除全局臨時表。任務和表之間的關聯僅在單個Transact-SQL語句的生命週期中進行維護。這意味着在完成創建會話結束時主動引用表的最後一個Transact-SQL語句時,會刪除全局臨時表。「