[英]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.