我有一个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 回答
您必须删除
select
中列列表周围的括号 .(id, start_date, NULL, "type_b", relationship_id)
是具有匿名记录类型的 single 列 .有关详细信息,请参阅手册:Row Constructors
另外:字符串必须放在 single 引号之间 . 双引号(
"
)用于标识符 ."type_b"
是列的名称,'type_b'
是字符串 .有关详细信息,请参阅手册:Constants
所以查询应该是:
我假设你的tracking_date字段被定义为时间戳 . 在这种情况下,请尝试以下方法如果这不起作用,你得到的错误是什么?