2016-06-22 10 views
2

と一致しないときに挿入:私はこのクエリを持って選択

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

時にSELECT句が一致し、それが働いています。 SELECTが一致しない場合でも、 "id"フィールドに0を挿入するクエリを実行したいと思います。

答えて

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); 
+0

「ベース」の選択によって返された行は、1つに限定されません。 :) – KiMaN

2

あなたはその多くの利点を持っているUNIONを使用することができます

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'); 
関連する問題