Как ВСТАВИТЬ без дубликатов, могу ли я использовать MERGE с самостоятельной ссылкой? - PullRequest
1 голос
/ 24 сентября 2019

Мне нужно вставить недублированные значения ... Это "объединение с собственной ссылкой" не работает должным образом, но не сгенерировало сообщение об ошибке ... Могу ли я использовать аналогичную вещь?

MERGE INTO mydb.mytab AS Tref 
USING mydb.mytab AS T ON Tref.id=T.id
WHEN NOT MATCHED THEN INSERT VALUES (123, 'etc');

(обновить, но не изменить вопрос) Похоже, что другая конструкция, как предлагается здесь ,

INTO INTO mydb.mytab 
  SELECT t1.* 
  FROM ( select stack(2, 123,'ect1',  20,'etc2') as (id,etc) ) t1
  LEFT OUTER JOIN mydb.mytab t2 ON t1.id = t2.id
  WHERE t1.id is null
;

это не элегантно (тамдругие?) но это работает (!).Есть ли альтернатива с MERGE?

1 Ответ

1 голос
/ 25 сентября 2019

Слияние будет вставлено, только если mydb.mytab не содержит совпадающих строк

MERGE INTO mydb.mytab AS Tref 
USING  ( select stack(2, 123,'ect1',  20,'etc2') as (id,etc) ) AS T ON Tref.id=T.id
WHEN NOT MATCHED THEN INSERT VALUES (t.id, t.etc) --columns positions should match those in Tref 
;
...