Попытка создать некоторые тестовые данные с помощью скрипта, заполнив TableA.colVal идентификаторами, которых еще нет в TableB.
Конечным результатом является то, что все TableA.colVal в конечном итоге заполняются TableB.ID_PK:
INSERT INTO tableA (colVal , aPK2, aPK3) VALUES
(
(SELECT colVal , aPK2, aPK3
FROM tableA
WHERE colVal NOT IN
(
SELECT bID_PK
FROM (SELECT bID_PK, rownum r
FROM (SELECT bID_PK
FROM TableB order by bID_PK DESC)
)
where r = 1 --
)
and rownum = 1)
);
Таким образом, если у TableA есть colVals 1,2,5,6,7,8, а
у TableB есть bID_PKs 1,5,7
в частности, я хотел бы определить «отсутствующие» 3 значения TableB.bID_PK: 2, 6 и 8
Я попытался увеличить r = 1 в надежде получить следующее значение для заполнения, но я всегда получаю 1-й TableA.colVal, которого нет в TableB (поэтому все мои TableA.colVal получают одно и то же значение). Изменение rownum для внешнего выбора также не работает.
Помощь?
пояснение Мне нужно заполнить TableA.colVal значениями TableB.bID_PK, которые еще не существуют в TableA.colVal , где TableA имеет составной первичный ключ с 3 полями. Я могу вручную изменить значения оставшихся полей PK, но мне нужно заполнить оставшееся поле значением из TableB.bID_PK (который является первичным ключом TableB).
values
неверно, если вы хотите, чтобы источникомinsert
был операторselect
:INSERT INTO tableA (colVal , aPK2, aPK3) select ...
- person a_horse_with_no_name   schedule 20.10.2016