MySQLの回数:別の計算フィールドで(名前で)1つの計算フィールドを参照
-
19-09-2019 - |
質問
私は、例えば、算出された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