MySQL 5.0视图中FROM子句的子查询:限制与解决方法
MySQL 5.0用户在尝试创建在FROM子句中包含子查询的视图时可能会遇到错误,错误信息为“ERROR 1349 (HY000): View's SELECT contains a subquery in the FROM clause.” 此限制阻碍了基于包含子查询的复杂查询创建视图。
一种可能的解决方法是为每个子查询创建单独的视图,然后用这些派生视图替换子查询。考虑以下示例查询:
<code class="language-sql">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;</code>
为了规避此限制,可以为两个子查询创建视图:
<code class="language-sql">CREATE VIEW v_user_sent_count AS SELECT u1.name AS UserName, COUNT(m1.UserFromId) AS SentCount FROM Message m1, User u1 WHERE u1.uid = m1.UserFromId GROUP BY u1.name; CREATE VIEW v_users_sent_over_3 AS SELECT UserName FROM v_user_sent_count WHERE SentCount > 3;</code>
在原始查询中,用派生视图替换子查询:
<code class="language-sql">SELECT UserName FROM v_users_sent_over_3;</code>
这种方法允许在存在FROM子句中子查询限制的MySQL版本中,基于复杂的子查询创建视图。但是,需要注意的是,并非所有子查询都可以不放在FROM子句中表达。例如,用于排序或过滤的子查询可能需要其他方法,例如使用相关子查询或窗口函数。
以上是MySQL FROM 子句中的视图和子查询:如何克服 5.0 的限制?的详细内容。更多信息请关注PHP中文网其他相关文章!