(Одна таблица) вставка строк - PullRequest
2 голосов
/ 22 мая 2019

Этот вопрос является продолжением этого .

У меня есть следующая таблица egr:

+---------+------------+
|  offid  |  groupid   |
+---------+------------+
|       1 | 101        |
|       1 | 202        |
|       2 | 202        |
|       2 | 404        |
+---------+------------+

Я хотел бы добавить отсутствующие групповые идентификаторы, которыеу offid 2 нет (по сравнению с offid 1).Результат будет:

+---------+------------+
|  offid  |  groupid   |
+---------+------------+
|       1 | 101        |
|       1 | 202        |
|       2 | 202        |
|       2 | 404        |
|       2 | 101        |   --> new row to insert
+---------+------------+

Моя попытка, основанная на ответе на другой мой вопрос (не работает):

INSERT INTO egr (offid, groupid)
  SELECT 2, egr1.groupid
  FROM egr AS egr1 
  WHERE egr1.offid = 1
  AND NOT EXISTS
    (select 1
                  from egr e2
                  where e2.groupid = egr1.groupid and 
                        e2.offid in (1, 2) and
                        e2.offid <> egr1.offid 
                 );

1 Ответ

2 голосов
/ 22 мая 2019

Этого проще достичь с помощью оператора except:

INSERT INTO egr (offid, groupid)
SELECT 2, groupid
FROM   egr
WHERE  offid = 1
EXCEPT
SELECT 2, groupid
FROM   egr
WHERE  offid = 2
...