【问题标题】:MySql VIEW remove subquery in FROM conditionMySql VIEW 删除 FROM 条件下的子查询
【发布时间】:2016-08-23 19:46:36
【问题描述】:

我真的是我的 sql 的新手,我试图创建一些视图但是 mysql 大喊错误

ERROR 1349 (HY000):视图的 SELECT 包含 FROM 中的子查询 子句

如何删除 FROM 条件中的子查询并在视图中获得相同的结果?

SELECT actual, 
        curr, 
        CASE WHEN actual > anterior THEN 'raise' 
            WHEN actual < anterior THEN 'drop' ELSE 'nothing' 
        END as 'status' 
FROM ( 
        SELECT o.i_price as actual, o.i_currency as curr, 
            (
                SELECT i.i_price 
                FROM Info i 
                WHERE i.i_article_id = 1 
                  AND i.i_insert < o.i_insert 
                ORDER BY i.i_insert DESC LIMIT 1
            ) AS anterior 
        FROM Info o 
        WHERE o.i_article_id = 1 
        ORDER BY o.i_insert 
        DESC LIMIT 1 ) as q

【问题讨论】:

    标签: mysql


    【解决方案1】:

    在创建视图的过程中不能使用 dinamica 子查询,所以你应该为子查询创建一个合适的视图

        create view my_q as 
        SELECT o.i_price as actual, o.i_currency as curr, 
                    (
                        SELECT i.i_price 
                        FROM Info i 
                        WHERE i.i_article_id = 1 
                          AND i.i_insert < o.i_insert 
                        ORDER BY i.i_insert DESC LIMIT 1
                    ) AS anterior 
                FROM Info o 
                WHERE o.i_article_id = 1 
                ORDER BY o.i_insert 
                DESC LIMIT 1
    

    然后在你的顶视图中调用视图

        create  view my_top_view as  
        SELECT actual, 
                curr, 
                CASE WHEN actual > anterior THEN 'raise' 
                    WHEN actual < anterior THEN 'drop' ELSE 'nothing' 
                END as 'status' 
        FROM  my_q;
    

    这样性能会受到影响..但是要克服错误,您不能使用子查询动态..如果可以的话,重写查询肯定更好。

    【讨论】:

    • 在性能方面,这对数据库性能来说甚至比 from 子句本身中的子查询更加灾难性。好吧,至少它会起作用。更好的是重写查询而不是在临时表上堆叠临时表。 MySQL 有理由禁止这样的启动。
    • @Kaii 我同意性能会受到影响的事实.. 但是要克服错误,您不能使用子查询动态.. 如果可以的话,最好重写查询.. 我添加了这个建议也回答。
    【解决方案2】:

    View 的选择包含子查询错误:您可以解决这个问题。使用 mysql mysqlworkbench 连接 mysql 数据库。并从 mysqlworkbench 运行创建视图脚本。它会工作

    【讨论】:

      猜你喜欢
      • 2011-05-27
      • 1970-01-01
      • 2021-07-16
      • 2012-08-28
      • 1970-01-01
      • 2013-06-17
      • 2017-01-18
      • 2012-01-15
      相关资源
      最近更新 更多