簡體   English   中英

Mysql VIEW在FROM條件中刪除子查詢

[英]MySql VIEW remove subquery in FROM condition

我真的與我的SQL新手,我試圖創建一些視圖,但MySQL大喊錯誤

錯誤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

您不能在創建視圖的過程中使用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;

這樣做會降低性能。但是要克服該錯誤,您一定不能使用子查詢動態。

視圖的選擇包含一個子查詢錯誤:您可以解決此問題。 使用mysql mysqlworkbench連接mysql DB。 並從mysqlworkbench運行create view腳本。 會工作的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM