如何定义具有两个计算字段,例如一个视图...

 ('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次(每个子查询):

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语句引用视图将它创建一个最终的选择实际上它运行。因此,你不能真正有一个看法是指本身。

这里使用的选项包括:(1)定义它指的是第一视图,以便第二视图来创建和,或(2)写出来的总和普通写法是这样的:

('TableName'.'BlueSquares' + 'TableName'.'RedSquares' + 'TableName'.'BlueCirles' + 'TableName'.'RedCircles') AS TotalShapes
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top