【问题标题】:postgres - where in (list) - column does not existpostgres - 在(列表)中的位置 - 列不存在
【发布时间】:2016-03-05 13:31:26
【问题描述】:

我来自 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。还有其他方法可以运行此查询吗?

【问题讨论】:

标签: sql postgresql string-constant


【解决方案1】:

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

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

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

【讨论】:

    【解决方案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_IDENTIFIER AS OFF。默认为ON

    SET QUOTED_IDENTIFIER 为 ON 时,所有由 double 分隔的字符串 引号被解释为对象标识符

    检查:

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

    LiveDemo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      相关资源
      最近更新 更多