PostgreSQL - where in(列表)- 列不存在。

7

我来自SQL Server,看到下面的查询语句不起作用,感到很惊讶:

DELETE FROM user_job_titles WHERE id IN (
"c836d018-1d12-4507-a268-a4d80d6d3f54",
"d0961a90-7d31-4c4c-9c1b-671115e3d833",
"62dda420-6e62-4017-b41d-205c0aa82ead"
)

用户职位标题表包含以下列:

id
user_id
job_title_id

错误信息是:
ERROR:  column "c836d018-1d12-4507-a268-a4d80d6d3f54" does not exist
LINE 2: "c836d018-1d12-4507-a268-a4d80d6d3f54"

我正在使用最新版本的postgresql和pgAdmin。是否有其他方式来运行这个查询?


4
SQL使用单引号表示字符串常量:http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS - user330315
2个回答

12

使用单引号表示字符串常量:

DELETE FROM user_job_titles
    WHERE id IN ('c836d018-1d12-4507-a268-a4d80d6d3f54',
                 'd0961a90-7d31-4c4c-9c1b-671115e3d833',
                 '62dda420-6e62-4017-b41d-205c0aa82ead'
                );

双引号是在表名和列名中使用的转义字符,因此会出现错误。


4

你需要用'引用字符串字面量

DELETE FROM user_job_titles 
WHERE id IN (
'c836d018-1d12-4507-a268-a4d80d6d3f54',
'd0961a90-7d31-4c4c-9c1b-671115e3d833',
'62dda420-6e62-4017-b41d-205c0aa82ead'
);

我来自SQL Server,惊奇地发现以下查询不起作用。

那么您已经将 SET QUOTED_IDENTIFIER 设置为 OFF。 默认情况下它是 ON

SET QUOTED_IDENTIFIER为ON时,所有由双引号括起来的字符串都被解释为对象标识符

请检查:

SET QUOTED_IDENTIFIER OFF;
SELECT "A"


-- The same behaviour as in Postgresql
SET QUOTED_IDENTIFIER ON;
SELECT "A"
-- Invalid column name 'A'.

实时演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接