2014-10-01 81 views
0

我念到類似的問題的解決方案,但它似乎沒有我的情況下工作,我想:如何在MySQL Workbench中重用表?

WITH tmp AS 
((things below is just an **example** to show that it will return a table) 
SELECT 
*clounmname* FROM *tablename* 
WHERE *XXXX* 
) 
SELECT *columnname* FROM tmp; 

但我的MySQL工作臺說,與一開始就被誤.. 我也試圖添加一個;與以往,但它仍然無法正常工作..

所以,我想:

SELECT *columnname* FROM 
((things below is just an **example** to show that it will return a table) 
SELECT 
*clounmname* FROM *tablename* 
WHERE *XXXX* 
); 

它運行沒有錯誤,但沒有返回.. 所以我不知道該怎麼辦,有沒有mysql workbench出了什麼問題?

(我的MySQL worbench的版本號爲6.2的Ubuntu 14.04) (上面的查詢僅僅是一個例子,我知道並和其他東西。)

我甚至嘗試:

CREATE TABLE temp 
SELECT *columnname* FROM 
((things below is just an **example** to show that it will return a table) 
SELECT 
*clounmname* FROM *tablename* 
WHERE *XXXX* 
); 
SELECT *columnname* FROM temp; 

但沒有任何錯誤返回

回答

1

您正在使用的查詢是被稱爲Common table Expression (CTE)。截至目前,MySQL中不存在對CTE的支持。替代解決方案是使用Temporary tableinline view

因此,您發佈的CTE查詢可以使用inline view進行修改,如下所示。從內部查詢返回的結果集將被視爲臨時結果集/視圖。

select * from 
( 
SELECT *clounmname* 
FROM *tablename* 
WHERE *XXXX* 
) tab 

如果內部查詢的結果將被使用超過一次,然後考慮拉動,在一個臨時表中,然後使用該臨時表像下面

create temporary table mytab (*clounmname* datatype); 

insert into mytab 
SELECT *clounmname* 
FROM *tablename* 
WHERE *XXXX*; 

select * from mytab; 

確認的該datatype臨時表中的列與選擇列表中列的datatype相同。

1

MySQL目前不支持WITH關鍵字。公用表表達式在MySQL中尚不可用。

解決方案是使用臨時或派生表或內聯視圖。

+0

你能否解釋一下如何使用臨時表或派生表或內聯視圖? – wwood 2014-10-01 13:39:27

+0

如果你真的是MySQL的新手,你應該使用這個網站:[Link](http://www.mysqltutorial.org/mysql-temporary-table/) – 2014-10-01 13:41:47

+0

我剛發現它自己,但是謝謝 – wwood 2014-10-01 13:44:59