【问题标题】:SQL query: Can't order by column called "order"?SQL 查询:不能按名为“order”的列排序?
【发布时间】:2012-10-08 19:26:24
【问题描述】:

我正在将现有脚本中的一列拉入我的模板文件,一切正常。

唯一的问题是,这个脚本有一个名为 order 的列,然后每一行在该列中都有一个数字来显示哪个应该在顶部等。如果我将查询设置为“ORDER BY name”例如,一切正常,但是当我使用“ORDER BY order”时,我得到一个 SQL 错误。
我可以没有一个名为order 的专栏吗?我无法更改列名,因为它是脚本的一部分。

有办法解决吗?

这是我的 SQL 查询中的行:

SELECT * FROM categories WHERE hide = 0 ORDER BY order 

【问题讨论】:

  • 尝试使用表标识符(categories.order)。您没有说明您使用的是哪个 DBMS,但这可能与存在无法使用的保留字这一事实有关
  • 您使用的是什么数据库引擎? Alfabravo 几乎可以肯定是正确的,但是在 MySQL(反引号)、SQL Server(括号)、Oracle(双引号)等中引用保留字的方式不同。

标签: php sql sql-order-by


【解决方案1】:

order 是 SQL 中的关键字。因此,如果您希望使用关键字作为名称,请在其周围使用反引号:

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

试试看:)

【讨论】:

  • 仅供参考:这也适用于任何关键字。例如。如果您有一个名为“select”的列(这也是一个关键字),您也可以使用反引号。
【解决方案2】:

如果您使用 Postgres,只需使用“column_name”,例如:

SELECT "order" FROM table_name WHERE "order" > 10 ORDER BY "order";

【讨论】:

    【解决方案3】:

    尝试使用反引号:

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

    ORDER 是 SQL 中的保留字。您可以使用保留字作为列名,但在引用它时必须将其括在反引号中。最好将所有列名都用反引号括起来,这样您就不会遇到这个问题。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        来自manual

        如果你引用它,保留字可以用作标识符。

        所以你可以这样使用它:

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

        【讨论】:

        • 你怎么知道 OP 正在使用 MySQL?
        【解决方案6】:

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

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

        【讨论】:

          【解决方案7】:

          用括号为我工作。按 [T].[ORDER] 的顺序从 dbo.test 中选择 T.*

          【讨论】:

            猜你喜欢
            • 2012-03-14
            • 1970-01-01
            • 2021-08-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-12-22
            • 2021-12-15
            • 2023-04-03
            相关资源
            最近更新 更多