2016-04-19 5 views
3

У меня есть две таблицы, TBTC03 и TBTC03Y, с TBTC03Y с двумя дополнительными столбцами как EFFDTE и EXPDTE. Я должен объединить данные из TBTC03 в TBTC03Y со следующей логикой:Нарушение первичного ключа при объединении данных из другой таблицы

Если ни одного совпадения, TC03 не найден в TC03Y
новый TC03Y запись строить с данными TC03
Дата вступления в силу будет по умолчанию " 01-01-1980'
Дату истечения срока будет по умолчанию '09 -30-1995'

Я написал запрос для того же, как:

insert into TBTC03Y (LOB,MAJPERIL,LOSSCAUSE,NUMERICCL,EFFDTE,EXPDTE) 
    select LOB,MAJPERIL,LOSSCAUSE,NUMERICCL,'0800101' ,'0950930' 
    from TBTC03 where not EXISTS (select * from TBTC03Y where 
TBTC03Y.LOB =  TBTC03.LOB AND 
TBTC03Y.MAJPERIL = TBTC03.MAJPERIL AND 
TBTC03Y.LOSSCAUSE = TBTC03.LOSSCAUSE AND 
TBTC03Y.NUMERICCL = TBTC03.NUMERICCL) 

Первичным ключом для обеих таблиц являются LOB, MAJPERIL и LOSSCAUSE.

Однако у меня есть записи TBTC03Y, у которых уже есть данные с первичным ключом.

Выполнение приведенного выше запроса дает ограничения на первичные ключи для некоторых строк. Я не могу понять, как я могу его усвоить.

+0

Примеры данных и желаемые результаты действительно помогут объяснить, что вы хотите сделать. –

+0

Спасибо Гордону, написав образцы данных, я понял проблему. : D – CHS

ответ

3

Проблема с первичной ключевым является то, что вы также включаете uding NUMERICCL в предложении WHERE. Если вы удалите это, вы будете вставлять уникальные данные.

Возможно, вам придется создать отдельный процесс, поскольку, как кажется, у вас есть записи в каждой таблице, которые имеют те же LOB, MAJPERIL и LOSSCAUSE, но имеют другой NUMERICCL. Я могу представить себе три варианта:

  1. У вас возникла проблема с данными, требующими фиксации.
  2. Возможно, вы хотите обновить это значение до соответствия, и в этом случае вы смотрите UPDATE, а не INSERT INTO.
  3. Вам необходимо обновить составной первичный ключ, включив в него столбец NUMERICCL.
  4. Удаление NUMERICCL из предложения where также исправит это.
+1

О, да. я понял это, пытаясь написать образцы данных для вопроса! Спасибо!! – CHS

+0

Отлично, задавая вопрос - отличный способ сделать что-то для себя :). Я сижу рядом с менеджером проекта, который никоим образом не техничен и иногда задает ей вопросы, на которых я застрял.Она не может помочь по большей части, но дело в том, что задание вопроса часто вызывает что-то в моей голове. –

3

Если PK для обеих таблиц {LOB, MAJPERIL, LOSSCAUSE}, вы должны удалить TBTC03Y.NUMERICCL = TBTC03.NUMERICCL из вашего предложения where.

Пример:

t1{LOB, MAJPERIL, LOSSCAUSE, NUMERICCL} 
    1 1   1   1 

t2{LOB, MAJPERIL, LOSSCAUSE, NUMERICCL} 
    1 1   1   2 

В t2 нет строки, где:

TBTC03Y.LOB =  TBTC03.LOB AND 
TBTC03Y.MAJPERIL = TBTC03.MAJPERIL AND 
TBTC03Y.LOSSCAUSE = TBTC03.LOSSCAUSE AND 
TBTC03Y.NUMERICCL = TBTC03.NUMERICCL 

Но вставка будет Obvioulsy нарушают PK ограничение в t2:

t2{LOB, MAJPERIL, LOSSCAUSE} 
    1 1   1 
Смежные вопросы