我对SQL非常陌生,并尝试构建我的第一个CTE。这是语法:
WITH myCTE AS
(
SELECT
ProductID,
MAX(Quantity) As MaxQuant
FROM
OrderDetails
GROUP BY
ProductID
HAVING
MaxQuant > 100
)
SELECT
*
FROM MyCTE
WHERE
ProductID > 50
如果有帮助,我在w3schools.com的教程数据库上进行了尝试。有什么办法可以得到比这更有用的错误?
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'myCTE AS (SELECT ProductID, MAX(Quantity) As MaxQuant FROM OrderDetails GROUP ' at line 1
https://www.w3schools.com/sql/trymysql.asp?filename=trysql_func_mysql_truncate
答案 0 :(得分:0)
您的问题可能是myCTE
和MyCTE
-第一个问题是如何定义CTE,第二个问题是如何引用CTE。
Here是一个db <>小提琴,显示了它使用的名称匹配但不区分大小写。我注意到在MariaDB(基于MySQL)中,这不是问题。
在MySQL中,表名,表别名以及CTE的大小写敏感性有些棘手。如documentation中所述:
因此,底层操作系统的区分大小写在数据库,表和触发器名称的区分大小写中起着重要作用。这意味着这些名称在Windows中不区分大小写,但在大多数Unix版本中都区分大小写。
基于language describing CTEs,,它们很有可能存储在某种临时位置中:
公用表表达式(CTE)是一个命名的临时结果集,它存在于单个语句的范围内,以后可以在该语句中引用,可能多次。
由于使用底层操作系统,它们有时可能区分大小写。
注意:我很确定CTE就是这种情况。后来documentation指出表别名有时区分大小写:
默认情况下,表别名在Unix上区分大小写,但在Windows或macOS上不区分大小写。以下语句在Unix上不起作用,因为它将别名同时称为a和A:
mysql>从tbl_name AS中选择col_name 其中a.col_name = 1或A.col_name = 2;