所以我有一个使用phpmyadmin的Xampp服务器,我使用了此命令,该命令一直有效:
WITH temptable AS (SELECT *, ROW_NUMBER() OVER (ORDER BY character_ID DESC)
AS t FROM characters) SELECT * FROM temptable WHERE t BETWEEN 0 AND 10;
现在我在真实的服务器上有了一个数据库,它确实可以正常工作了。因此,我在互联网上寻找其他命令,并始终在多个网站上找到该命令:
SELECT
ROW_NUMBER() OVER(ORDER BY Character_ID ASC) AS t,
Charactername
FROM characters WHERE t < 5;
我查看了几个网站,它对我不起作用,我也不知道为什么。 当我编写此命令时,Phpmyadmin中的语法不会标记任何错误,但仍然出现错误: 您的SQL语法有误;
也许有人知道为什么吗?
答案 0 :(得分:1)
您无法按SELECT
中定义的列进行过滤。如果使用MySQL(或MariaDB),则可以使用HAVING
子句:
SELECT ROW_NUMBER() OVER(ORDER BY Character_ID ASC) AS t,
Charactername
FROM characters
HAVING t < 5;
这些数据库扩展了HAVING
子句在非聚合查询中的使用,并允许使用列别名进行过滤。
答案 1 :(得分:0)
在select中过滤聚合不起作用。按如下所示修改查询,
SELECT * FROM
(
SELECT
ROW_NUMBER() OVER(ORDER BY Character_ID ASC) AS t,
Charactername
FROM characters) Characternametab
WHERE t < 5;