Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql从工作创建视图”;准备;陈述_Mysql_Sql - Fatal编程技术网

mysql从工作创建视图”;准备;陈述

mysql从工作创建视图”;准备;陈述,mysql,sql,Mysql,Sql,我有一个SQL查询 SELECT CONCAT( 'SELECT `table`.id', GROUP_CONCAT(CONCAT(' , `t_', REPLACE(name, '`', '``'), '`.value AS `', REPLACE(name, '`', '``'), '`' ) SEPARATOR ''), ' FROM `table` ', GROUP_CONCAT(CONCAT(' LEFT JOIN `table`

我有一个SQL查询

SELECT CONCAT(
  'SELECT `table`.id', GROUP_CONCAT(CONCAT('
     ,    `t_', REPLACE(name, '`', '``'), '`.value
         AS `', REPLACE(name, '`', '``'), '`'
   ) SEPARATOR ''),
 ' FROM `table` ', GROUP_CONCAT(CONCAT('
     LEFT JOIN `table`   AS `t_', REPLACE(name, '`', '``'), '`
            ON `table`.id = `t_', REPLACE(name, '`', '``'), '`.id
           AND `t_', REPLACE(name, '`', '``'), '`.name = ', QUOTE(name)
   ) SEPARATOR ''),
 ' GROUP BY `table`.id'
) INTO @qry FROM (SELECT DISTINCT name FROM `table`) t;

PREPARE stmt FROM @qry;
EXECUTE stmt;
老实说,我几乎不理解它,我很惊讶它甚至是可能的,但在修改了一些名称后,它确实满足了我的需要,但我需要在“视图”中使用它

如何将其添加到数据库中的视图中


非常感谢

我想问这个问题已经有一段时间了,但我知道这是可能的

对准备好的查询的最后一部分稍作修改,如下所示,将帮助您实现目标:

只需在
准备stmt之前进行修改

SET @qrys = CONCAT('CREATE OR REPLACE VIEW "put_your_view_name_without_quote" AS ',@qry);
PREPARE stmt FROM @qrys;
EXECUTE stmt;

无法从动态sql语句生成视图。但您可以创建
create view…
语句,并在影响列计数的表内容发生更改时执行它。这是真的,我可以这样做。我可以动态创建sql,但它使用“max()”来聚合/分组,但我最好有一个可以处理文本的函数。不过,我也可以解决这个问题。类似于:useTheOneThatIsntNull()的东西他找到了!group_concat,必须去掉Separator,我想我可以做到。只有在忽略视图名称的两边引号的情况下,这才有效。