如何在MySQL Workbench中重用表?

时间:2014-10-01 13:29:30

标签: mysql sql

我阅读了类似问题的解决方案,但在我的案例中似乎没有用,我试过了:

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工作台说最初的WITH被误用了.. 我也尝试添加一个;在WITH之前,但它仍然不起作用..

所以我试过了:

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有什么问题吗?

(对于Ubuntu 14.04,我的Mysql worbench的版本号为6.2) (上面的查询只是一个例子,我知道AND和其他东西。)

我甚至尝试过:

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;

但没有任何错误会返回

2 个答案:

答案 0 :(得分:1)

MySQL目前不支持WITH关键字。 MySQL中没有公用表表达式。

解决方案是使用临时或派生表或内联视图。

答案 1 :(得分:1)

您正在使用的查询称为Common table Expression (CTE)。截至目前,MySQL中不存在对CTE的支持。替代解决方案是使用Temporary tableinline view

因此,您可以使用inline view修改您发布的CTE查询,如下所示。从内部查询返回的结果集将被视为临时结果集/视图。

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相同。