我阅读了类似问题的解决方案,但在我的案例中似乎没有用,我试过了:
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;
但没有任何错误会返回
答案 0 :(得分:1)
MySQL目前不支持WITH
关键字。 MySQL中没有公用表表达式。
解决方案是使用临时或派生表或内联视图。
答案 1 :(得分:1)
您正在使用的查询称为Common table Expression (CTE)
。截至目前,MySQL
中不存在对CTE的支持。替代解决方案是使用Temporary table
或inline 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
相同。