如果不存在于表中,我想在postgresql中插入一行。我的表格结构如下。
表名:test
id serial NOT NULL
单位整数
eventid integer
没有时区的date_time时间戳
我尝试了以下查询,但在Select附近给了我错误。
INSERT INTO test VALUES (905, 10, '2015-09-23 13:34:26')
SELECT 905, 10, '2015-09-23 13:34:26'
WHERE NOT EXISTS(
SELECT 1
FROM test
WHERE unitid = 905 AND eventid = 10 AND date_time = '2015-09-23 13:34:26'
);
请任何人给我一个很好的建议。我想要更快的方法来做到这一点。
答案 0 :(得分:1)
您正在指定值,然后您将包含一个选择。您需要在没有insert into
(...)的情况下编写values
并使用您在那里的select
代替。简单的例子
insert into items_ver
select * from items where item_id=2;
取自here。首先尝试您的选择。是
SELECT 905, 10, '2015-09-23 13:34:26'
WHERE NOT EXISTS(
SELECT 1
FROM test
WHERE unitid = 905 AND eventid = 10 AND date_time = '2015-09-23 13:34:26'
);
如果是这样,那么你应该有这样的插入:
INSERT INTO test
SELECT 905, 10, '2015-09-23 13:34:26'
WHERE NOT EXISTS(
SELECT 1
FROM test
WHERE unitid = 905 AND eventid = 10 AND date_time = '2015-09-23 13:34:26'
);