列在 PostgreSQL 中不存在(WHERE column_name = column_value)
Column doens't exists in PostgreSQL (WHERE column_name = column_value)
我在 PostgreSQL 中有以下 table:
id 和 grade 是 INT,note 和 subject 都是 VARCHAR
当我运行命令时:
SELECT * FROM grades
WHERE subject = "latin";
我收到以下错误:
在 pgAdmin4 中:
错误:列“拉丁文”不存在
第 2 行:WHERE subject = "latin"
^
SQL 状态:42703
字符:37
并在 cmd 中:
错误:列“拉丁文”不存在
第 1 行:SELECT * FROM upisi WHERE subject = "latin";
我来自 MySQL,所以我认为这可行。
如果我将 grade = something 放在 WHERE 子句中,效果很好。知道为什么会这样吗?
字符常量需要单引号。 (双引号用于引用标识符)
SELECT * FROM grades
WHERE subject = 'latin';
如果您使用 WHERE subject = "latin"
,DBMS 认为“latin”是列名,但事实并非如此。
就像引号类型错误一样简单。你想要:
SELECT * FROM grades
WHERE subject = 'latin';
说明:
- 单引号,如
'latin'
,是在标准 SQL 中编写字符串的标准方式,应该适用于所有 DBMS。
- 双引号,在 Postgres 和其他一些 DBMS 中,是引用 identifiers 的一种方式 - 所以如果你的列名由于某种原因有一个 space (有好的理由不多,但可能),那么你可以写
SELECT * FROM grades WHERE "subject name" = 'latin'
- "subject name"
是列的名称,'latin'
是一个字符串。
虽然双引号在 SQL 标准中,但其他 DBMS 使用不同的语法来引用标识符,因此可能会将双引号视为编写字符串的替代方法。
-- Postgres (also works in Microsoft SQL Server, but isn't the default style)
SELECT * FROM grades WHERE "subject name" = 'latin'
-- MySQL
SELECT * FROM grades WHERE `subject name` = 'latin'
-- Microsoft SQL Server
SELECT * FROM grades WHERE [subject name] = 'latin'
但是,如果您总是对字符串使用单引号,并避免 需要 引用的名称,您会 运行 遇到更少的问题。
-- Works pretty much everywhere
SELECT * FROM grades WHERE subject = 'latin'
我在 PostgreSQL 中有以下 table:
id 和 grade 是 INT,note 和 subject 都是 VARCHAR
当我运行命令时:
SELECT * FROM grades
WHERE subject = "latin";
我收到以下错误:
在 pgAdmin4 中: 错误:列“拉丁文”不存在 第 2 行:WHERE subject = "latin" ^ SQL 状态:42703 字符:37
并在 cmd 中: 错误:列“拉丁文”不存在 第 1 行:SELECT * FROM upisi WHERE subject = "latin";
我来自 MySQL,所以我认为这可行。 如果我将 grade = something 放在 WHERE 子句中,效果很好。知道为什么会这样吗?
字符常量需要单引号。 (双引号用于引用标识符)
SELECT * FROM grades
WHERE subject = 'latin';
如果您使用 WHERE subject = "latin"
,DBMS 认为“latin”是列名,但事实并非如此。
就像引号类型错误一样简单。你想要:
SELECT * FROM grades
WHERE subject = 'latin';
说明:
- 单引号,如
'latin'
,是在标准 SQL 中编写字符串的标准方式,应该适用于所有 DBMS。 - 双引号,在 Postgres 和其他一些 DBMS 中,是引用 identifiers 的一种方式 - 所以如果你的列名由于某种原因有一个 space (有好的理由不多,但可能),那么你可以写
SELECT * FROM grades WHERE "subject name" = 'latin'
-"subject name"
是列的名称,'latin'
是一个字符串。
虽然双引号在 SQL 标准中,但其他 DBMS 使用不同的语法来引用标识符,因此可能会将双引号视为编写字符串的替代方法。
-- Postgres (also works in Microsoft SQL Server, but isn't the default style)
SELECT * FROM grades WHERE "subject name" = 'latin'
-- MySQL
SELECT * FROM grades WHERE `subject name` = 'latin'
-- Microsoft SQL Server
SELECT * FROM grades WHERE [subject name] = 'latin'
但是,如果您总是对字符串使用单引号,并避免 需要 引用的名称,您会 运行 遇到更少的问题。
-- Works pretty much everywhere
SELECT * FROM grades WHERE subject = 'latin'