选择不匹配时插入

时间:2016-06-22 04:25:48

标签: postgresql insert-into

我有这个问题:

INSERT INTO tbl_1(id , name)
SELECT  id, 'XXX' 
FROM tbl_2 t WHERE t.name='XXX';

它在SELECT子句匹配时工作。我想在" id"中使用0来执行插入查询。字段即使SELECT不匹配。

2 个答案:

答案 0 :(得分:2)

您可以使用UNION,其优势在于" base"返回的行数。 select不仅限于一个:

INSERT INTO tbl_1 (id , name)
SELECT id, 'XXX' 
FROM tbl_2 t 
WHERE t.name='XXX'
union all
select 0, 'XXX'
where not exists (select 1 from tbl_2 t where t.name = 'XXX');

答案 1 :(得分:1)

将您的查询包含在子选择中(因此它将始终返回至少一个值):

INSERT INTO tbl_1(id , name)
SELECT COALESCE((SELECT id FROM tbl_2 t WHERE t.name='XXX'), 0), 'XXX';

INSERT INTO tbl_1(id , name)
SELECT COALESCE((SELECT id FROM tbl_2 t WHERE t.name=v.name), 0), v.name
FROM (VALUES ('XXX')) v(name);