我不知道为什么这些SQL命令不起作用

时间:2020-05-11 13:32:50

标签: mysql sql database

所以我有一个使用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语法有误;

也许有人知道为什么吗?

2 个答案:

答案 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;
相关问题