4

たとえば、2つの計算フィールドを持つビューを定義するにはどうすればよいですか...

 ('TableName'.'BlueSquares' + 'TableName'.'RedSquares') AS TotalSquares, ('TableName'.'BlueCirles' + 'TableName'.'RedCircles') AS TotalCircles

...そして、次のように、最初の2つの計算フィールドに基づく3番目の計算フィールドを作成します。

 ('ViewName'.'TotalSquares' + 'ViewName'.'TotalCircles') AS TotalShapes

...?

最初の2つの計算フィールドを名前で参照すると、フィールドが不明であるというメッセージが表示されます。

ありがとう!

4

3 に答える 3

4

ビューではサブクエリは許可されていないため、複数のビューを作成してサブクエリをシミュレートする必要があります。

たとえば、このクエリを直接実行すると、問題が解決します。

SELECT 
    TotalCircles + TotalSquares AS TotalShapes
FROM
    (SELECT 
        BlueCirles + RedCircles AS TotalCircles,
        BlueSquares + RedSquares AS TotalSquares
    FROM
        (SELECT
            2 AS BlueCirles,
            3 AS RedCircles,
            4 AS BlueSquares,
            5 AS RedSquares
        ) AS shapes
    ) as totals;

MySQLのドキュメントによると、ビューにはFROM句にサブクエリを含めることができないという制限があります。この制限を回避し、このクエリをビューに変換するには、ビューを3つのビュー(サブクエリごとに1つ)に分割し、最後にフィールドの目的の組み合わせを指定します。

CREATE VIEW shapes AS
SELECT
    2 AS BlueCirles,
    3 AS RedCircles,
    4 AS BlueSquares,
    5 AS RedSquares;

CREATE VIEW totals AS
SELECT 
    BlueCirles + RedCircles AS TotalCircles,
    BlueSquares + RedSquares AS TotalSquares
FROM
    shapes;

CREATE VIEW result AS
SELECT 
    TotalCircles + TotalSquares AS TotalShapes
FROM
    totals;

SELECT * FROM result;
于 2009-12-13T04:20:09.767 に答える
2

...最初の2つの計算フィールドに基づく3番目の計算フィールドを作成します...

お気づきのとおり、同じSELECTで計算列を参照することはできません。オプションは次のとおりです。

ロジックを複製する

MySQLは、奇妙な理由でビューのサブクエリをサポートしていません。

CREATE OR REPLACE VIEW your_view AS
SELECT t.BlueSquares + t.RedSquares AS TotalSquares, 
       t.BlueCirles + t.RedCircles AS TotalCircles,
       t.BlueSquares + t.RedSquares + t.BlueCirles + t.RedCircles AS TotalShapes
  FROM TABLE t

ビューをレイヤー化

最も推奨されないオプション...

 CREATE OR REPLACE VIEW initial_view AS
    SELECT t.BlueSquares + t.RedSquares AS TotalSquares, 
           t.BlueCirles + t.RedCircles AS TotalCircles,
      FROM TABLE

 CREATE OR REPLACE VIEW layered_view AS
    SELECT iv.TotalSquares + iv.TotalCircles AS TotalShapes
      FROM initial_view iv
于 2009-12-13T04:31:04.743 に答える
2

残念ながら、あなたがやろうとしていることは、あなたがやろうとしている方法では実際には不可能です。一般に、MySQLビューはスクリプト化されたSELECTとして表示できます。ビューの結果は、ソースとは別にデータベースに保存されるのではなく、ビューを参照するときに計算されます。

ほとんどの場合、ビューからSELECTを実行すると、MySQLはMERGEアルゴリズムを使用します。これは、ビューの定義とビューを参照するSELECTステートメントをマージして、実際に実行される最終的なSELECTを作成することを意味します。そのため、VIEWにそれ自体を参照させることはできません。

ここでのオプションは、(1)合計を作成するために最初のビューを参照する2番目のビューを定義するか、(2)次のように合計を手書きで書き出すことです。

('TableName'.'BlueSquares' + 'TableName'.'RedSquares' + 'TableName'.'BlueCirles' + 'TableName'.'RedCircles') AS TotalShapes
于 2009-12-13T04:31:51.823 に答える