为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL:FROM子句限制中的带有子查询的视图

MySQL:FROM子句限制中的带有子查询的视图

慕斯王 2019-10-19 16:29:59
在MySQL 5.0中,为什么尝试在FROM子句中创建带有子查询的视图时会发生以下错误?错误1349(HY000):视图的SELECT在FROM子句中包含一个子查询如果这是MySQL引擎的限制,那么为什么他们还没有实现此功能呢?此外,对于此限制有哪些好的解决方法?是否有任何变通方法可用于FROM子句中的任何子查询,或者是否存在某些无法在FROM子句中使用子查询无法表达的查询?查询示例(已包含在注释中):SELECT temp.UserName FROM (SELECT u1.name as UserName, COUNT(m1.UserFromId) as SentCount       FROM Message m1, User u1       WHERE u1.uid = m1.UserFromId       Group BY u1.name HAVING SentCount > 3 ) as temp
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

我有同样的问题。我想创建一个视图来显示最近一年的信息,该视图从一张记录了2009年至2011年记录的表格中显示。这是原始查询:


SELECT a.* 

FROM a 

JOIN ( 

  SELECT a.alias, MAX(a.year) as max_year 

  FROM a 

  GROUP BY a.alias

) b 

ON a.alias=b.alias and a.year=b.max_year

解决方案概述:


为每个子查询创建一个视图

用这些视图替换子查询

这是解决方案查询:


CREATE VIEW v_max_year AS 

  SELECT alias, MAX(year) as max_year 

  FROM a 

  GROUP BY a.alias;


CREATE VIEW v_latest_info AS 

  SELECT a.* 

  FROM a 

  JOIN v_max_year b 

  ON a.alias=b.alias and a.year=b.max_year;

它在mysql 5.0.45上运行良好,没有太多的速度损失(与执行没有任何视图的原始子查询select相比)。


查看完整回答
反对 回复 2019-10-19
  • 3 回答
  • 0 关注
  • 866 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信