我收到MySQL 1349错误,但似乎该错误是不正确的:
ERROR 1349: View's SELECT contains a subquery in the FROM clause在创建视图时,我可以没有任何子查询吗?
下面是我的SQL:
CREATE VIEW `wordpress`.`ffi_be_v_book_details` AS (
SELECT ffi_be_courses. * , COALESCE( `Total` , 0 ) AS `Total`
FROM `ffi_be_courses`
LEFT JOIN (
SELECT * , COUNT( `Course` ) AS `Total`
FROM ffi_be_courses
RIGHT JOIN (
SELECT `Course`
FROM `ffi_be_bookcourses`
LEFT JOIN `ffi_be_sale` ON ffi_be_bookcourses.SaleID = ffi_be_sale.SaleID
WHERE DATE_ADD( ffi_be_sale.Upload, INTERVAL(
SELECT `BookExpireMonths`
FROM `ffi_be_settings` ) MONTH ) > CURDATE( ) AND ffi_be_sale.Sold = '0'
GROUP BY ffi_be_bookcourses.SaleID
) AS `q1` ON ffi_be_courses.Code = q1.Course
GROUP BY q1.Course
) AS `q2` ON ffi_be_courses.Code = q2.Code
WHERE ffi_be_courses.Type = 'Arts'
ORDER BY ffi_be_courses.Name ASC
)谢谢您抽时间见我。
发布于 2013-08-01 08:41:17
您忽略了这样一个事实,即MySQL中的视图不允许在from子句中使用子查询。但是,它们在select、where和having子句中是允许的。
documentation非常清楚:
不能在视图的
子句中使用FROM子查询。
在本例中,您可以将from子句重写为select子句中的相关子查询。您还可以使用多层视图来执行您想要的操作。
编辑:
SQL中的SELECT语句包含以下子句:SELECT、FROM、WHERE、GROUP BY、HAVING和ORDER BY (根据标准)。此外,MySQL还添加了LIMIT和INTO OUTFILE等内容。您可以从MySQL描述documentation中的SELECT子句的方式中看到这一点。您还可以在几乎所有数据库的文档中看到这一点。
诸如join之类的操作是FROM子句的一部分(类似地,WITH ROLLUP是GROUP BY的一部分,DESC是ORDER BY的一部分)。这些可能看起来像是晦涩难懂的语法约定,但当存在像上面这样的限制时,它就变得很重要。
也许造成这种混乱的原因之一是缩进样式,如下所示:
select . . .
from t1
inner join t2
on . . .join语句在select下面排成一行。这是误导性的。我会这样写:
select
from t1 join
t2
on . . .只有select子句排在select.下面
发布于 2013-08-01 08:43:13
请参阅documentation --
视图定义受以下限制:
SELECT语句不能在FROM子句中包含子查询。
为每个FROM子句创建单独的视图。
https://stackoverflow.com/questions/17983379
复制相似问题