Oli*_*ryn 2 mysql sql view subquery
我收到 MySQL1349错误,但该错误似乎不正确:
ERROR 1349: View's SELECT contains a subquery in the FROM clause
Run Code Online (Sandbox Code Playgroud)
创建视图时可以没有任何子查询吗?
这是我的 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
)
Run Code Online (Sandbox Code Playgroud)
感谢您的时间。
您忽略了 MySQL 中的视图不允许在from子句中使用子查询的事实。但是,它们可以出现在selectandwhere和having子句中。
该文档非常清楚:
子查询不能在视图的 FROM 子句中使用。
对于您的情况,您可以将该from子句重写为子句中的相关子查询select。您还可以使用多层视图来执行您想要的操作。
编辑:
SQL 中的 SELECT 语句具有以下子句: SELECT、FROM、WHERE、GROUP BY、HAVING和ORDER BY(根据标准)。此外,MySQL 添加了LIMIT、 和 等内容INTO OUTFILE。SELECT您可以通过 MySQL在文档中描述该子句的方式看到这一点。您还可以在几乎所有数据库的文档中看到这一点。
诸如joinare 之类的操作是子句的一部分FROM(同样,WITH ROLLUPis 是 the 的一部分GROUP BY并且DESCis 是 的一部分ORDER BY)。这些可能看起来像是晦涩难懂的语法约定,但当存在像上面这样的限制时,它就变得很重要。
也许造成混乱的一个原因是缩进样式,如下所示:
select . . .
from t1
inner join t2
on . . .
Run Code Online (Sandbox Code Playgroud)
join 语句在select. 这是误导性的。我会把它写成:
select
from t1 join
t2
on . . .
Run Code Online (Sandbox Code Playgroud)
只有select条款排列在select.
| 归档时间: |
|
| 查看次数: |
8949 次 |
| 最近记录: |