创建mysql视图时如何在字段中将行与逗号分开

时间:2018-03-09 06:54:22

标签: mysql sql

我在mysql中试过create view

我的选择查询正常工作以纠正输出。这是我的代码::

SELECT id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(colors, ',', n.digit+1), ',', -1) color
FROM colors
  INNER JOIN
  (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) n
  ON LENGTH(REPLACE(colors, ',' , '')) <= LENGTH(colors)-n.digit
ORDER BY
  id,
  n.digit;

当我把它放在一个视图时遇到了一些问题,错误信息是:: View's SELECT contains a subquery in the FROM clause

CREATE VIEW view_name AS
SELECT id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(colors, ',', n.digit+1), ',', -1) color
FROM colors
  INNER JOIN
  (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) n
  ON LENGTH(REPLACE(colors, ',' , '')) <= LENGTH(colors)-n.digit
ORDER BY
  id,
  n.digit;

请帮我解决此错误。

1 个答案:

答案 0 :(得分:0)

https://dev.mysql.com/doc/refman/5.7/en/view-restrictions.html说:

  

在MySQL 5.7.7之前,子查询不能在视图的FROM子句中使用。

https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-7.html说:

  

以前,视图定义不允许在FROM子句中包含派生表(子查询)。这一限制现已解除。

     

以前,如果FROM子句中的派生表(子查询)或视图在SELECT列表中包含子查询,则无法将其合并到外部查询中。相反,它们是使用物化来处理的。现在已取消此限制,以便使用合并可以更快地执行先前使用实现执行的查询。

因此升级到MySQL 5.7.7或更高版本。