В вашем комментарии есть двусмысленность: «Я хочу сопоставить id и pid, как описано выше, а затем добавить соответствующие значения строк c2 и c3 из таблицы A в таблицу B.»Существует (как минимум) две возможности: 1) Таблица B содержит дополнительный столбец c3 или 2) значение c3 из таблицы A следует поместить в столбец c2 таблицы B. Ниже приведен пример кода для каждой из этих двух альтернатив.
Таблица B имеет столбец c3
insert into B
(pid, c2, c3)
select
A.id,
A.c2,
A.c3
from
A
inner join B on A.id = B.pid
and (A.c2 != B.c2 or A.c3 != B.c3)
;
Вторая часть предложения объединения гарантирует, что данные из таблицы A не дублируют данные, уже находящиеся в таблице B.
Значения A.c3 должны быть добавлены как B.c2
a) Поскольку два разных столбца таблицы A должны быть вставлены в один и тот же столбец таблицы B, простой способ сделать это с помощью двухотдельные запросы.
insert into B
(pid, c2)
select
A.id,
A.c2
from
A
inner join B on A.id = B.pid and A.c2 != B.c2
;
insert into B
(pid, c2)
select
A.id,
A.c3
from
A
inner join B on A.id = B.pid and A.c3 != B.c2
;
b) Если важно сделать это в одном запросе, столбцы c2 и c3 таблицы A можно объединить перед вставкой в таблицу B.
insert into B
(pid, c2)
select
A2.id,
A2.c2
from
(select id, c2 from A union select id, c3 as c2 from A) as A2
inner join B on A2.id = B.pid and A2.c2 != B.c2
;