3

我来自 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"
)

其中 user_job_titles 具有以下列:

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

2 回答 2

5

对字符串常量使用单引号:

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

双引号是用于表名和列名的转义字符。因此错误。

于 2016-03-05T13:32:46.503 回答
2

您需要引用字符串文字'

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_IDENTIFIERAS 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'.

LiveDemo

于 2016-03-05T13:32:27.650 回答