gpt4 book ai didi

MySQL:在 FROM 子句限制中使用子查询查看

转载 作者:行者123 更新时间:2023-11-29 16:02:34 26 4
gpt4 key购买 nike

在 MySQL 5.0 中,为什么在 FROM 子句中尝试创建带有子查询的 View 时会出现以下错误?

ERROR 1349 (HY000): View's SELECT contains a subquery in the FROM clause

如果这是 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

最佳答案

我也遇到了同样的问题。我想创建一个 View 来显示最近一年的信息,该表包含 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

解决方案概要:

  1. 为每个子查询创建一个 View
  2. 用这些 View 替换子查询

这是解决方案查询:

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 上运行良好,没有太大的速度损失(与执行原始子查询选择没有任何 View )。

关于MySQL:在 FROM 子句限制中使用子查询查看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56059184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com