【问题标题】:Select a column with a keyword name选择具有关键字名称的列
【发布时间】:2012-09-13 06:38:01
【问题描述】:

我有一个名为“测试”的表

它包含一个名为“AND”的列

为此,我使用以下查询

insert into test values ('a','abc');
insert into test values ('b','def');

现在我想从“测试”表中选择我的“与”列

查询 select AND from test; 不起作用,因为 AND 是关键字

我试过了

select "AND" from test;
select 'AND' from test;

两个查询都返回错误的结果,如下所示

如何选择我的“AND”列?

【问题讨论】:

  • 嗯,我是唯一一个对 OP 没有在 create table 中的反引号和 select 中需要的反引号之间建立联系感到奇怪的人吗? :-) 而且,为了记录,and 是一个相当糟糕的列名称,不是因为它是一个关键字,而是因为它不是真正的描述性。
  • 是的,强烈建议避免使用保留关键字。
  • 我知道最好避免使用这样的列名。我不想使用这样的列名。我只是想知道如何获得它。我使用 ' 符号而不是 ` 这就是我得到错误结果的原因。无论如何在 sql server 中,如果你使用 select "name" from aa;然后您将在名称列中获得内容。但是在 mysql 中,如果你在列名中使用 " 或 ' 你不会得到正确的结果。

标签: mysql


【解决方案1】:

改用backtick 转义关键字。就像您创建表格的方式一样。使用双引号或单引号会将其解析为 string 这就是为什么你会得到两条 and 记录

select `AND` from test;

【讨论】:

  • 或者使用像样的列名 :-) 在任何情况下,+1 来确定它。
  • @paxdiablo 我同意你的看法。 And 不能描述列名
【解决方案2】:
  1. 不要创建名称为关键字的列。

  2. 如果您确实使用这样的名称创建列,请使用反引号(仅限 MySQL)或双引号(SQL 标准)将名称括起来。我不确定您是否需要打开某种机制才能在 MySQL 中使用双引号。这会创建一个“分隔标识符”。

    SELECT `AND` AS a, "AND" AS b
      FROM test;
    

另见:

【讨论】:

  • 假设我们想在 AS 的右边使用 AND(或其他保留字)?反引号不起作用。 update 在 AS:ed 名称周围使用双引号是可行的。
【解决方案3】:

这是一个古老的问题并已解决。 Read here more.

但你仍然可以试试这个:

select your_tablename.column_name from table_name;

你的代码:-

select test.AND from test;

【讨论】:

    【解决方案4】:

    如果要使用保留字作为列,则必须在保留字列周围使用反引号.....

    在你的情况下,你必须这样做:

    select `AND' from test;
    

    【讨论】:

      【解决方案5】:

      根据您的问题:

      CREATE TABLE `test` (
          `count` VARCHAR(50) NULL DEFAULT NULL,
          `AND` VARCHAR(50) NULL DEFAULT NULL
      ----^---^ Why do you use `backtick` (`) in CREATE TABLE statement?
      )
      

      您需要在SELECT 语句中使用backtick

      SELECT `AND` FROM test;
      -------^---^-----------
      

      MySQL: Reserved Words

      【讨论】:

        【解决方案6】:

        如果你使用 "" 选择 setement,它会选择一个给定的字符串 所以你必须给出一个列名,比如 在 mssql 中你必须使用

        select [AND] from test;
        

        或在 mysql 语法中 从测试中选择AND

        【讨论】:

        • 不,不,不,一千次,不。这将使您的 SQL 分析器窒息,除非它非常智能并且可以根据上下文确定其含义和含义(据我所知,没有一个可以做到这一点)。
        • 是的,你是对的,这是我的错误,我编辑了这个,我只是忘记并保留了关键字
        猜你喜欢
        • 2018-10-29
        • 1970-01-01
        • 1970-01-01
        • 2020-03-19
        • 2018-09-05
        • 2022-06-10
        • 1970-01-01
        • 2023-02-03
        • 1970-01-01
        相关资源
        最近更新 更多