带有子查询的 MySQL 视图

Posted

技术标签:

【中文标题】带有子查询的 MySQL 视图【英文标题】:MySQL View with a SubQuery 【发布时间】:2013-03-05 19:58:45 【问题描述】:

我有以下观点,我需要从 Oracle 移植到 mysql。由于subquery cannot exist in a view 错误,这在 Oracle 中完美运行,但在 MySQL 中却不行。如何转换它以使其在 MySQL 中工作?如果我对此提出另一种看法,它将如何影响性能?可取吗?如果是这样,我该怎么做?如果第二个视图不是一个好主意,如何转换它?感谢您的帮助!

CREATE OR REPLACE VIEW view_name (var1, var2, var3, var4, var5) AS 
SELECT SUM(A.var1a) var1,
        SUM(A.var2a) var2,
        SUM(A.var3a) var3,
        SUM(A.var4a) var4,
        SUM(A.var5a) var5
 FROM (SELECT CASE columnx when 'abc' then COUNT(E.ID) end var1a,
     CASE columnx when 'def' then COUNT(E.ID) end var2a,
     CASE columnx when 'ghi' then COUNT(E.ID) end var3a,
     CASE columnx when 'jkl' then COUNT(E.ID) end var4a,
                    COUNT(E.ID) var5a
             FROM   <list of tables>
            WHERE   <set of conditions>
         GROUP BY   columnx) A;

【问题讨论】:

【参考方案1】:

您应该能够使用以下代码重写它:

CREATE OR REPLACE VIEW view_name (var1, var2, var3, var4, var5) AS 
SELECT 
    sum(CASE columnx when 'abc' then 1 else 0 end) var1a,
    sum(CASE columnx when 'def' then 1 else 0 end) end var2a,
    sum(CASE columnx when 'ghi' then 1 else 0 end) end var3a,
    sum(CASE columnx when 'jkl' then 1 else 0 end)end var4a,
    COUNT(E.ID) var5a
FROM   <list of tables>
WHERE   <set of conditions>

【讨论】:

谢谢!我会试一试,让你知道会发生什么。谢谢! :) 绝妙的答案!在我的第一次尝试中就像一个魅力!谢谢! :) 嗨@bluefeet,你能帮我解决一个问题吗?这里:***.com/questions/15582172/…。谢谢! :)

以上是关于带有子查询的 MySQL 视图的主要内容,如果未能解决你的问题,请参考以下文章

带有子查询的 MySQL UPDATE TABLE 不会先执行子查询

带有连接和子查询的 mysql 查询优化

带有子查询的Mysql删除[重复]

带有子查询的 MySQL UPDATE 查询永远存在

联合分组子查询视图事务python操作mysql索引

带有子查询的 MySQL 删除给出了语法错误