当前位置: 首页 > 面试题库 >

MySQL视图:在另一个计算字段中引用一个计算字段(按名称)

周培
2023-03-14
问题内容

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

 ('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;


 类似资料:
  • 问题内容: 我正在尝试创建一个触发器,该触发器将根据用户输入的lat / lng列来更新GEOMETRY列。我的触发器看起来像这样- 但是,当我插入带有lng,lat值的新行时,出现以下错误- 错误1442(HY000):无法更新存储函数/触发器中的表’tbl’,因为调用该存储函数/触发器的语句已使用该表。 我不能创建这样的触发器吗?如果没有,那么自动化的方法是什么? 问题答案: 尝试使用INSE

  • 问题内容: 我有一个如下表: 现在我想更改此表以具有新字段,并且该字段必须具有默认值 如下所示: 怎么做? 谢谢你的帮助 问题答案: 根据MySQL 文档(添加了重点),您不能使用默认值的表达式: 10.1.4。数据类型默认值 数据类型规范中的DEFAULT value子句指示列的默认值。除一个例外, 默认值必须为常量; 它不能是函数或表达式 。例如,这意味着您不能将日期列的默认值设置为诸如NOW

  • 如何创建计算字段以及怎么样从应用程序中使用别名。 计算字段 存储在数据库表中的数据一般不是应用程序所需要的格式,例如: 显示两个信息,但不是在用一个表 不同列中,但程序需要把他们作为一个格式的字段检索出来 列数据是大小混合,但程序需要把所以数据按大写表示。 物品订单表存储的物品的价格和数量,但没有存储物品的总价,打印时,需要物品的总价格。 根据需要表的数据进行总数,平均数等计算。 上面的情况都我们

  • 我刚开始掌舵,我不明白为什么会这样。我正在使用官方的EFK图表,我正在尝试将发行版名称添加到FluentD-ElasticSearch的主机字段,但它没有得到评估。它只是作为字符串传递。ELASTICSEARCH_HOSTS中的发行版名称计算正确,但主机字段中的发行版名称完全没有计算。有人能说出为什么会发生这种情况,以及如何修复它吗? Helm版本:version.buildinfo{versio

  • 我在编程一个订单提交页面时遇到了一个相当大的问题,该页面的目的是提交一个订单的争议--提供两个字段被填写,但只有当一个字段少于另一个字段时。 基本上,一个是下拉,另一个是争端框,查询如下: 如果DispotestExtBox=“”而下拉框=“请选择...” 一切正常-提交按钮已启用 如果DisportestExtBox!=“”而下拉框=“请选择...” 错误(反之亦然,因此如果填充了Dispone

  • 问题内容: 我在Sqlite中有一个查询,其中涉及复杂的列计算,可以这样说: 我想将此计算选择为,但我还需要将其用作另一种计算的组成部分: 不幸的是,这会产生错误: 我知道我可以简单地重复计算: 但是,假设操作复杂且昂贵,是否有什么方法可以在以后重新引用它而不必重新计算呢? 问题答案: 您需要使用子查询。 结果