SQL查询:无法按名为“order”的列排序?

6

我正在将现有脚本中的一个列拉到我的模板文件中,一切都很好。

唯一的问题是,这个脚本有一个名为order的列,每一行都有一个数字来表示应该在顶部等位置。例如,如果我将查询设置为"ORDER BY name",一切正常,但当我使用"ORDER BY order"时,就会出现SQL错误。
我不能把列名改变,因为它是脚本的一部分。

有没有什么办法?

这是我的SQL查询中的一行:

SELECT * FROM categories WHERE hide = 0 ORDER BY order 

1
尝试使用表标识符(categories.order)。您没有说明使用的是哪种DBMS,但可能与不能使用保留字有关。 - Alfabravo
你在使用什么数据库引擎?Alfabravo几乎肯定是正确的,但是在MySQL(反引号),SQL Server(方括号),Oracle(双引号)等中引用保留字的方式是不同的。 - Pondlife
7个回答

13

order 是 SQL 中的关键字。所以如果你想要使用一个关键字作为名称,就需要使用反引号将其括起来:

SELECT * FROM categories WHERE hide = 0 ORDER BY `order`

试一下这个 :)


请注意:这也适用于任何关键字。例如,如果您有一个名为“select”的列(这也是一个关键字),您也可以使用反引号。 - Jamesking56

2
如果您正在使用PostgreSQL,只需使用“column_name”,例如:
SELECT "order" FROM table_name WHERE "order" > 10 ORDER BY "order";

1

由于order是SQL关键字,您应该使用反引号将其正确转义为字段标识符:

SELECT ... FROM ... ORDER by `order`

适用于MySql! - RaphaMex

0

尝试使用反引号:

SELECT * FROM `categories` WHERE `hide` = 0 ORDER BY `order`

ORDER是SQL中的保留字。您可以将保留字用作列名,但在引用它时必须用反引号将其括起来。最好将所有列名都用反引号括起来,以避免遇到此问题。


0

来自手册

如果您将其引用,保留字可以用作标识符。

因此,您可以像这样使用它:

SELECT * FROM categories WHERE hide = 0 ORDER BY `order`

1
你怎么知道这个OP在使用MySQL? - Pondlife

0

使用括号对我有效。SELECT T.* FROM dbo.test AS T ORDER BY [T].[ORDER]


0
尝试在列名周围使用反引号,应该就可以了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接