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)
创建VIEW于MySQL平淡容易,但也有一些限制.请参阅此处: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中是可怕的.