MySQLの回数:別の計算フィールドで(名前で)1つの計算フィールドを参照

StackOverflow https://stackoverflow.com/questions/1895500

質問

私は、例えば、算出された2つのフィールドを持つビューを定義することができますどのように...

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

...と、最初の二つの計算フィールドに基づいている第三計算フィールドを作成中...として

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

...?

私は名前で最初の二つの計算フィールドを参照する場合は、

、私はフィールドが不明であるメッセージが表示されます。

ありがとうございます。

役に立ちましたか?

解決

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

直接実行された場合たとえば、このクエリはあなたの問題を解決します。

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;

他のヒント

  

... ...最初の二つの計算フィールドに基づいている第三計算フィールドを作成します。

あなたが見つけてきたように、あなたが同じ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

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

あなたはビューから選択すると、

ほとんどの場合、MySQLはMERGEアルゴリズムを使用しています。これは、それが実際に実行されるSELECT決勝を作成するためにあなたのビューとビューを参照するSELECT文の定義をマージすることを意味します。そのように、あなたは本当にVIEWは、自身を参照することはできません。

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

('TableName'.'BlueSquares' + 'TableName'.'RedSquares' + 'TableName'.'BlueCirles' + 'TableName'.'RedCircles') AS TotalShapes
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top