Ты имеешь в виду что-то вроде этого?:
Insert EffectiveDatedAttributes ( Id, Col1, Col2....)
select unique eda.productauthorization, 'Attribute1', 'Attribute2'....
from effectivedatedattributes eda
inner join partyrelationship pr
on eda.productauthorization = pr.ID
where pr.class = 'com.pmc.model.bind.ProductAuthorization';
Или же у вас есть другие таблицы, которые должны быть вставлены?
РЕДАКТИРОВАТЬ С учетом дополнительной информации, которую вы указали в комментариях, вам нужно будет сгенерировать значения идентификаторов, которые входят в EffectiveDateAttributes
. Вот самый запрос, который не требует использования общих табличных выражений:
Insert EffectiveDateAttributes( Id, Col1, Col2, Col3, ..., )
Select Distinct
(
Select Count(*) + LastId.Id + 1
From PartyRelationship As PR1
Where PR1.class = 'com.pmc.model.bind.ProductAuthorization';
And PR1.ID < PR.ID
) Id
, PR.ID, 'Static Value 1', 'Static Value 2', PR.Col1, PR.Col2...
From PartyRelationship PR
Join EffectiveDateAttributes EDA
On EDA.ProductAuthorization = PR.ID
Cross Join (
Select Max(ID) Id
From EffectiveDateAttributes
) As LastId
Where PR.class = 'com.pmc.model.bind.ProductAuthorization'
Я все еще не совсем уверен, что мне нужно объединение с EffectiveDateAttributes. Его единственная цель - убедиться, что любые значения, которые мы оцениваем в таблице PartyRelationship, существуют в таблице EffectiveDateAttributes. Если это не имеет значения, его можно удалить.
Во-вторых, я сгенерировал последовательность, запросив счет всех значений PartyRelationship, меньших, чем текущее значение. Это даст мне последовательность чисел, начиная с нуля. Затем я добавляю самое высокое значение идентификатора, которое в настоящее время существует в EffectiveDateAttributes
, и добавляю его, которое должно дать нам следующий доступный идентификатор, игнорируя различные проблемы изоляции транзакций. Есть более простой метод, который я опубликую в ближайшее время.
Также обратите внимание, что в операторе select вы можете включить дополнительные статические значения, которые используются для вставки в вашу таблицу. В вашем исходном запросе я заметил, что вы использовали слово «уникальный» вместо Distinct
. Стандартное слово ANSI для обеспечения уникальности в выводе оператора select - Distinct
, и Oracle это признает.
РЕДАКТИРОВАТЬ Использование общего табличного выражения делает это немного проще:
With NumberedTables As
(
Select PR.ID
, ROW_NUMBER() OVER( ORDER BY PR.ID ) As Num
From PartyRelationship PR
Join EffectiveDateAttributes EDA
On EDA.ProductAuthorization = PR.ID
Where PR.class = 'com.pmc.model.bind.ProductAuthorization'
Group By PR.ID
)
, LastIdUsed As
(
Select Max(ID) Id
From EffectiveDateAttributes
)
Insert EffectiveDateAttributes( Id, Col1, Col2, Col3, ..., )
Select Num + LastIdUsed.Id, 'Static Value 1', 'Static Value 2', PR.Col1, PR.Col2...
From NumberedTables
Join PartyRelationship PR
On PR.ID = NumberedTables.ID
Cross Join LastIdUsed