Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL中不存在列(其中列名称=列值)_Sql_Postgresql_String Constant - Fatal编程技术网

PostgreSQL中不存在列(其中列名称=列值)

PostgreSQL中不存在列(其中列名称=列值),sql,postgresql,string-constant,Sql,Postgresql,String Constant,我在PostgreSQL中有下表: id和grade都是整数,note和SUMBER都是VARCHAR 当我运行命令时: SELECT * FROM grades WHERE subject = "latin"; 我得到以下错误: 在pgAdmin4中: 错误:列latin不存在 第2行:其中主题=拉丁语 ^ SQL状态:42703 人物:37 在cmd中: 错误:列latin不存在 第1行:从upisi中选择*,其中主题=拉丁语 我来自MySQL,所以我认为这会起作用。

我在PostgreSQL中有下表:

id和grade都是整数,note和SUMBER都是VARCHAR

当我运行命令时:

SELECT * FROM grades 
WHERE subject = "latin";
我得到以下错误:

在pgAdmin4中: 错误:列latin不存在 第2行:其中主题=拉丁语 ^ SQL状态:42703 人物:37

在cmd中: 错误:列latin不存在 第1行:从upisi中选择*,其中主题=拉丁语

我来自MySQL,所以我认为这会起作用。
如果我在WHERE子句中输入grade=某个值,则效果很好。知道为什么会这样吗?

字符常量需要单引号。双引号用于引用标识符


如果使用WHERE SUPER=latin,DBMS希望拉丁名是一个列名,而事实并非如此。

字符常量需要单引号。双引号用于引用标识符


如果使用WHERE SUPER=latin,DBMS希望拉丁语是一个列名,而事实并非如此。

这就像错误类型的引号一样简单。你想要:

从等级中选择* 其中主语=‘拉丁语’; 解释:

单引号,如“latin”,是用标准SQL编写字符串的标准方法,应该适用于所有DBMS。 在Postgres和其他一些数据库管理系统中,双引号是引用标识符的一种方式——因此,如果您的列名由于某种原因在其中有空格,那么没有很多好的理由这样做,但这是可能的,那么您可以在subject name='latin'-subject name是列名的地方写入SELECT*,其中subject name是一个字符串。 尽管SQL标准中有双引号,但其他DBMS使用不同的语法引用标识符,因此可以将双引号视为编写字符串的替代方法

-Postgres也适用于Microsoft SQL Server,但不是默认样式 从科目名称为“拉丁语”的年级中选择* -MySQL 从“科目名称”为“拉丁语”的年级中选择* -Microsoft SQL Server 从[科目名称]=“拉丁语”的年级中选择* 但是,如果您总是对字符串使用单引号,并且避免使用需要引号的名称,您将遇到更少的问题

-几乎在任何地方都能工作 从科目为“拉丁语”的年级中选择*
这就像错误的引号类型一样简单。你想要:

从等级中选择* 其中主语=‘拉丁语’; 解释:

单引号,如“latin”,是用标准SQL编写字符串的标准方法,应该适用于所有DBMS。 在Postgres和其他一些数据库管理系统中,双引号是引用标识符的一种方式——因此,如果您的列名由于某种原因在其中有空格,那么没有很多好的理由这样做,但这是可能的,那么您可以在subject name='latin'-subject name是列名的地方写入SELECT*,其中subject name是一个字符串。 尽管SQL标准中有双引号,但其他DBMS使用不同的语法引用标识符,因此可以将双引号视为编写字符串的替代方法

-Postgres也适用于Microsoft SQL Server,但不是默认样式 从科目名称为“拉丁语”的年级中选择* -MySQL 从“科目名称”为“拉丁语”的年级中选择* -Microsoft SQL Server 从[科目名称]=“拉丁语”的年级中选择* 但是,如果您总是对字符串使用单引号,并且避免使用需要引号的名称,您将遇到更少的问题

-几乎在任何地方都能工作 从科目为“拉丁语”的年级中选择*
SQL标准和Postgres对字符串常量使用单引号SQL标准和Postgres对字符串常量使用单引号标识符的双引号在SQL标准中也有定义。@a_horse_与_no_name当然,但除非您设计一个新的DBMS,否则这比DBMS实际支持的内容更有用。也就是说,SQL Server确实支持将其作为一种替代方案,尽管它不是由其内置工具生成的。标识符的双引号也在SQL标准中定义。@a_horse_与_no_name________________________________________。也就是说,SQLServer确实支持将其作为一种替代方案,尽管它不是由其内置工具生成的。
SELECT * FROM grades 
WHERE subject = 'latin';