mysql使用子查询改进视图
我需要比较同一列中的行,因此我有下面的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
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