从具有多个子查询/联接的Select语句创建视图

Gra*_*und 2 mysql sql join view subquery

所以我有多个表,我正在尝试创建一个视图来显示我在select语句中返回的所有内容.但是,似乎mysql不允许创建具有子查询的视图.

所以不确定如何将其转换为视图.

Select  Title as "AlbumName" , 
        Sum(trk1.Price * trk1.Quant) as "TotalSales"
From    Album alb
        INNER JOIN
        (
            SELECT  AlbumId, 
                    t1.UnitPrice as "Price" , 
                    t1.Quantity as "Quant"
            FROM    Track trk
                    INNER JOIN
                    (
                        SELECT  TrackId, UnitPrice, Quantity
                        FROM    InvoiceLine
                        WHERE   InvoiceId IN ( SELECT InvoiceId FROM Invoice )
                    ) AS t1 ON (trk.TrackId = t1.TrackId)
        ) as trk1 ON (alb.AlbumId = trk1.AlbumId)
Group By alb.AlbumId
Run Code Online (Sandbox Code Playgroud)

Joh*_*Woo 6

创建VIEWMySQL平淡容易,但也有一些限制.请参阅此处:MySQL视图

其中一个限制是VIEWs不能SELECT包含在FROM子句中包含子查询的语句.因此,作为替代方案,首先为子查询创建一个包含IN子句的视图.

CREATE VIEW InvoiceLineView
AS
SELECT  DISTINCT a.*
FROM    InvoiceLine a
        INNER JOIN Invoice b
            ON a.InvoiceId = b.InvoiceId;
Run Code Online (Sandbox Code Playgroud)

创建视图后,您现在可以继续加入原始查询中的视图,以便现在可以创建完全正常的视图VIEW.对于未计算的子查询,您不需要额外的视图.

CREATE VIEW AlbumSales
AS
Select  Title as AlbumName, 
        Sum(t1.UnitPrice * t1.Quantity) as TotalSales
From    Album alb
        INNER JOIN Track trk
            ON alb.AlbumId = trk1.AlbumId
        INNER JOIN InvoiceLineView t1
            ON trk.TrackId = t1.TrackId
Group   By alb.AlbumId;
Run Code Online (Sandbox Code Playgroud)

虽然,VIEWS在MySQL中是可怕的.