如何解决列在 PostgreSQL 中不存在WHERE column_name = column_value
我在 Postgresql 中有下表:
id 和 grade 是 INT,note 和 subject 都是 VARCHARs
当我运行命令时:
SELECT * FROM grades
WHERE subject = "latin";
我收到以下错误:
在 pgAdmin4 中: 错误:“拉丁语”列不存在 第 2 行:WHERE 主题 =“拉丁语” ^ sql 状态:42703 人物:37
在 cmd 中: 错误:“拉丁语”列不存在 第 1 行:SELECT * FROM upisi WHERE subject = "latin";
我来自 MysqL,所以我认为这会奏效。 如果我在 WHERE 子句中放置 Grade = 东西,效果很好。知道为什么会这样吗?
解决方法
字符常量需要单引号。 (双引号用于引用标识符)
SELECT * FROM grades
WHERE subject = 'latin';
如果您使用 WHERE subject = "latin"
,DBMS 期望“latin”是列名,但事实并非如此。
就像错误类型的引号一样简单。你想要的:
SELECT * FROM grades
WHERE subject = 'latin';
解释:
- 单引号,如
'latin'
,是在标准 SQL 中编写字符串的标准方式,应该适用于所有 DBMS。 - 双引号,在 Postgres 和其他一些 DBMS 中,是一种引用标识符的方式 - 所以如果你的列名由于某种原因有一个空格(没有很多好的 > 这样做的理由,但它可能),那么你可以写
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'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。