微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

列在 PostgreSQL 中不存在WHERE column_name = column_value

如何解决列在 PostgreSQL 中不存在WHERE column_name = column_value

我在 Postgresql 中有下表:

enter image description here

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 举报,一经查实,本站将立刻删除。