首页 文章

在PostgreSQL中插入从表和字符串和空值中选择

提问于
浏览
0

我有一个PostgreSQL表:

表-A

id, start_date, tracking_date, type, relationship_id

本质上,我正在尝试删除tracking_date列并保留数据,为每个记录创建一个非空跟踪日期的新记录 . 新记录应该是原始记录的副本,除了start_date应该是原始行的tracking_date的值,新的tracking_date应该是NULL,最后类型应该是以这种方式修改的所有记录的字符串值“type_b” .

到目前为止,我的查询是:

INSERT INTO table_a
  (id, start_date, tracking_date, type, relationship_id)
SELECT (id, start_date, NULL, "type_b", relationship_id)
FROM table_a
WHERE tracking_date IS NOT NULL;

我不认为从table_a中选择NULL和/或字符串值“type_b”是有效的 . 我想知道如何使用INSERT INTO SELECT FROM查询结构来插入另一个表中的值以及同一查询中的NULL和字符串值 . (或在多个查询中)

之前

table_a
id, start_date, tracking_date, type, relationship_id
1, 1/1/1999, NULL, type_a, 100
1, 1/2/1999, 1/3/1999, type_a, 100

table_a
id, start_date, tracking_date, type, relationship_id
1, 1/1/1999, NULL, type_a, 100
1, 1/2/1999, 1/3/1999, type_a, 100
1, 1/3/1999, NULL, type_b, 100

(我的想法是,之后,我会删除tracking_date列))

2 回答

  • 0

    您必须删除 select 中列列表周围的括号 .

    (id, start_date, NULL, "type_b", relationship_id) 是具有匿名记录类型的 single 列 .

    有关详细信息,请参阅手册:Row Constructors


    另外:字符串必须放在 single 引号之间 . 双引号( " )用于标识符 . "type_b" 是列的名称, 'type_b' 是字符串 .

    有关详细信息,请参阅手册:Constants


    所以查询应该是:

    INSERT INTO table_a (id, start_date, tracking_date, type, relationship_id)
    SELECT id, start_date, NULL, 'type_b', relationship_id
    FROM table_a
    WHERE tracking_date IS NOT NULL;
    
  • 0

    我假设你的tracking_date字段被定义为时间戳 . 在这种情况下,请尝试以下方法如果这不起作用,你得到的错误是什么?

    INSERT INTO table_a 
    (id, start_date, tracking_date, type, relationship_id) 
    SELECT 
    (id, start_date, NULL::timestamp, "type_b", relationship_id) 
    FROM table_a 
    WHERE tracking_date IS NOT NULL;
    

相关问题