让我们考虑以下 postgres 查询:
SELECT *
FROM "MY_TABLE"
WHERE "bool_var"=FALSE
AND "str_var"='something';
当我删除引号时,查询无法正确响应,但当我"str_var"
在"bool_var"
. 为什么?在这种情况下编写查询的正确方法是什么,布尔列周围没有引号,文本列周围没有引号?还有什么?
让我们考虑以下 postgres 查询:
SELECT *
FROM "MY_TABLE"
WHERE "bool_var"=FALSE
AND "str_var"='something';
当我删除引号时,查询无法正确响应,但当我"str_var"
在"bool_var"
. 为什么?在这种情况下编写查询的正确方法是什么,布尔列周围没有引号,文本列周围没有引号?还有什么?
如果您不通过在create table "My_Table_ABC" ( "My_Very_Upper_and_Lowercasy_Column" numeric,...)
. 如果您有这样的名称,则必须始终在选择和其他引用中对这些名称进行双引号。
我建议不要创建这样的表,也不要在外部使用字符a-z
,0-9
和_
. 您不能保证曾经针对您的数据库使用的每个软件、库等都支持区分大小写。记住和做这种双引号也很乏味。
感谢@TimBiegeleisen 的评论,我能够查明问题所在;我使用保留关键字(“用户”)作为列名。
链接到文档中的保留关键字:https ://www.postgresql.org/docs/current/sql-keywords-appendix.html 。
现在我知道不要使用引号来查询列名,而是避免使用保留关键字作为列名。