2

そのため、複数のテーブルがあり、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
4

3 に答える 3

6

VIEWインを作成するのMySQLは簡単ですが、いくつかの制限があります。こちらを参照してください: MySQL ビュー

制限の 1 つは、FROM 句にサブクエリを含むステートメントをVIEWs に含めることができないことです。別の方法として、句SELECTを含むサブクエリのビューを最初に作成します。IN

CREATE VIEW InvoiceLineView
AS
SELECT  DISTINCT a.*
FROM    InvoiceLine a
        INNER JOIN Invoice b
            ON a.InvoiceId = b.InvoiceId;

ビューが作成されたら、元のクエリからビューを結合して続行できるため、完全に機能する を作成できます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;

ただし、VIEWSMySQL では恐ろしいことです。

于 2013-03-18T02:20:16.360 に答える
2

これが本当にビューとして必要な場合は、最初にサブクエリをビューとしてラップする必要があります。

CREATE VIEW vw_sub1 AS
SELECT TrackId, UnitPrice, Quantity
  FROM InvoiceLine
 WHERE InvoiceId
    IN (SELECT InvoiceId FROM Invoice);

CREATE VIEW vw_sub2 AS
SELECT AlbumId, t1.UnitPrice Price, t1.Quantity Quant
  FROM Track trk INNER JOIN 
       vw_sub1 t1 ON trk.TrackId = t1.TrackId;

CREATE VIEW vw_main AS
SELECT Title AlbumName, Sum(trk1.Price * trk1.Quant) TotalSales
  FROM Album alb INNER JOIN
       vw_sub2 trk1 ON alb.AlbumId = trk1.AlbumId
 GROUP BY alb.AlbumId;

コードはテストされていません

于 2013-03-18T02:19:10.980 に答える
0

残念ながら、MySQL はビューでこのようなサブクエリをサポートしていません。私が聞いた唯一の回避策は、サブクエリごとに個別のビューを作成し、他のビューを使用してメイン ビューを作成することです。これが機能するのは少し奇妙ですが、機能します。

あなたの場合、3 つのビューを作成する必要があります。内部サブクエリ用に 2 つ、メイン サブクエリ用に 1 つです。

于 2013-03-18T02:11:57.720 に答える