这很简单,但不知怎的,我在我的数据库上对这个查询做错了。
我在下面有这个查询:
SELECT login FROM accounts WHERE login = "loginname";
当我执行此查询时,我得到的结果是:
column "loginname" does not exist
这是一个没脑子的问题,为什么这个查询不能正常工作?我有一个登录列,我知道这个用户存在,因为我找到了这个人与rails控制台。为什么登录标准将自己称为列?
答案 0 :(得分:4)
如果您要匹配字符串
,请尝试使用单引号''
SELECT login FROM accounts WHERE login = 'loginname';
还有第二种标识符:分隔标识符或 引用标识符。它是通过包围任意序列形成的 双引号(“)中的字符。分隔标识符始终是 标识符,永远不是关键字。 所以“select”可以用来指代a 名为“select”的列或表,而未加引号的选择将是 作为关键词,因此会引发解析错误 用于需要表名或列名的地方。
答案 1 :(得分:2)
双引号("
)用于引用对象名称,区分大小写。在这种情况下,"loginname"
被解释为列名,查询失败,因为没有这样的列。要引用字符串文字,您应该使用单引号('
):
SELECT login FROM accounts WHERE login = 'loginname';
-- Here ---------------------------------^---------^
答案 2 :(得分:1)
似乎" "是believe the documentation的问题。字符串值需要单引号。
答案 3 :(得分:0)
还有第二种标识符:分隔标识符或带引号的标识符。它是通过用双引号(")括起任意字符序列而形成的。分隔标识符始终是标识符,而不是关键字。所以"选择"可用于引用名为" select"的列或表,而不带引号的select将被视为关键字,因此在预期使用表或列名称时会引发解析错误。该示例可以使用带引号的标识符编写,如下所示:
UPDATE "my_table" SET "a" = 5;
带引号的标识符可以包含任何字符,但代码为零的字符除外。 (要包含双引号,请写两个双引号。)这允许构造原本不可能的表名或列名,例如包含空格或符号的名称。长度限制仍然适用。
因此,在您的查询中"loginname"
与没有引号的loginname
相同 - 它试图引用具有该名称的列。要使其成为文字字符串,请改用单引号。