【问题标题】:What am I doing wrong in this SELECT statement?我在这个 SELECT 语句中做错了什么?
【发布时间】:2020-04-25 06:33:23
【问题描述】:

postgres 和 SQL 的新手。 表很少,并尝试编写可以跟踪任何更新并在审计表中捕获详细信息的通用函数。

参考另一个帖子表单上的回复表单Demian Martinez 这种方法解决了问题,我不必硬编码列名并维护函数。

但是,当我尝试在插入语句中包含登录信息时,如图所示,我收到的消息表明 SELECt 语句中存在一些语法问题。

insert into request_trail (Requ_Id,Time_stam,Acti,uid,Deta) values ('ST00000011',now(),'U',1234567,
SELECT pre.key AS columname, pre.value AS prevalue, post.value AS postvalue
FROM jsonb_each('{"col1": "same", "col2": "prediff", "col3": 1, "col4": false}') AS pre
CROSS JOIN jsonb_each('{"col1": "same", "col2": "postdiff", "col3": 1, "col4": true}') AS post
WHERE pre.key = post.key AND pre.value IS DISTINCT FROM post.value
AND pre.key IN ('col1', 'col2'));
ERROR:  syntax error at or near "SELECT"
LINE 2: SELECT pre.key AS columname, pre.value AS prevalue, post.val... 

不知道我做错了什么以及如何解决。 谁能给点建议?

【问题讨论】:

    标签: postgresql sql-insert


    【解决方案1】:

    如果你想使用 INSERT .. SELECT,你不能有 VALUES 子句。要使用常量值,只需将它们添加到 SELECT 列表中。

    insert into request_trail (Requ_Id,Time_stam,Acti,uid,Deta,?????) 
    SELECT 'ST00000011',
           now(),
           'U',
           1234567, 
           pre.key AS columname, 
           pre.value AS prevalue, 
           post.value AS postvalue
    FROM jsonb_each('{"col1": "same", "col2": "prediff", "col3": 1, "col4": false}') AS pre
      CROSS JOIN jsonb_each('{"col1": "same", "col2": "postdiff", "col3": 1, "col4": true}') AS post
    WHERE pre.key = post.key AND pre.value IS DISTINCT FROM post.value
    AND pre.key IN ('col1', 'col2'));
    

    但是,上述操作仍然会失败,因为 SELECT 的列数比 INSERT 指定的多。您必须在我放置???的位置指定正确的目标列

    【讨论】:

      猜你喜欢
      • 2017-07-17
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 2016-01-24
      相关资源
      最近更新 更多