Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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_Performance_Subquery_Mysql Error 1349 - Fatal编程技术网

mysql使用子查询改进视图

mysql使用子查询改进视图,mysql,performance,subquery,mysql-error-1349,Mysql,Performance,Subquery,Mysql Error 1349,我需要比较同一列中的行,因此我有下面的mysql查询,它可以很好地提供预期的结果 SELECT x.aord, x.anode AS parent, x.bnode AS child FROM (SELECT a.ordinal AS aord, a.id_dt_graph_node_edge AS aid, a.id_dt_graph_node AS an

我需要比较同一列中的行,因此我有下面的mysql查询,它可以很好地提供预期的结果

SELECT x.aord, 
       x.anode AS parent, 
       x.bnode AS child 
FROM   (SELECT a.ordinal               AS aord, 
               a.id_dt_graph_node_edge AS aid, 
               a.id_dt_graph_node      AS anode, 
               b.ordinal               AS bord, 
               b.id_dt_graph_node_edge AS bid, 
               b.id_dt_graph_node      AS bnode 
        FROM   dt_graph_node_edge a 
               JOIN dt_graph_node_edge b 
                 ON a.ordinal < b.ordinal) x 
       LEFT JOIN (SELECT a.ordinal               AS aord, 
                         a.id_dt_graph_node_edge AS aid, 
                         a.id_dt_graph_node      AS anode, 
                         b.ordinal               AS bord, 
                         b.id_dt_graph_node_edge AS bid, 
                         b.id_dt_graph_node      AS bnode 
                  FROM   dt_graph_node_edge a 
                         JOIN dt_graph_node_edge b 
                           ON a.ordinal < b.ordinal) y 
              ON x.aord = y.aord 
                 AND x.bord > y.bord 
WHERE  y.bord IS NULL 
ORDER  BY x.aord, 
          x.bord 

我发现由于错误1349,无法在此查询上创建视图。有谁能提出一个更好的方法来进行这样的查询,特别关注速度,实际上这个查询非常慢。谢谢。

无法从查询中创建视图的原因是它包含一个子查询。根据文档,视图不能在选择查询中包含子查询。解决方法是首先在子查询上创建一个视图,例如

CREATE VIEW firstSubquery
AS
SELECT a.ordinal               AS aord, 
       a.id_dt_graph_node_edge AS aid, 
       a.id_dt_graph_node      AS anode, 
       b.ordinal               AS bord, 
       b.id_dt_graph_node_edge AS bid, 
       b.id_dt_graph_node      AS bnode 
FROM   dt_graph_node_edge a 
       JOIN dt_graph_node_edge b 
         ON a.ordinal < b.ordinal;

CREATE VIEW secondSubquery
AS
SELECT  a.ordinal               AS aord, 
        a.id_dt_graph_node_edge AS aid, 
        a.id_dt_graph_node      AS anode, 
        b.ordinal               AS bord, 
        b.id_dt_graph_node_edge AS bid, 
        b.id_dt_graph_node      AS bnode 
FROM   dt_graph_node_edge a 
        JOIN dt_graph_node_edge b 
        ON a.ordinal < b.ordinal;

PS:MySQL中的视图非常糟糕

请发布此声明的解释。更新你的问题你的答案是正确的。是的,MySQL没有创建带有子查询的视图的选项。这是一种间接的方式来处理这种情况。
CREATE VIEW finalVIEW
AS
SELECT x.aord, 
       x.anode AS parent, 
       x.bnode AS child 
FROM   firstSubquery x 
       LEFT JOIN secondSubquery y 
              ON x.aord = y.aord AND x.bord > y.bord 
WHERE  y.bord IS NULL 
ORDER  BY x.aord,  x.bord