Предложение сделать массивную вставку - PullRequest
1 голос
/ 04 мая 2020

У меня есть таблицы ниже:

tb_profile   tb_mbx     tb_profile_mbx   tb_profile_cd
id           id         id_profile       id_perfil 
cod_mat      mbx        id_mbx           id_cd (matches id_mbx)
concil                  bp
                        masc
  • Мне нужно создать запрос, который при проверке, что id_cd 1,2,4,5 и 6 существует в tb_profile_cd, выполнить вставка в таблицу tb_profile_mbx с параметрами cod_matrix таблицы tb_profile.

  • Помня, что у каждого консила есть свой идентификатор в таблице tb_mbx, и у консиля есть много cod_mat.

  • Другой момент заключается в том, что идентификатор concil id_mbx представляет id_cd таблицы tb_profile_cd.

  • Еще один момент заключается в том, что, как я уже говорил выше, в консиле есть много cod_mat , У меня около 20 тысяч записей для каждого консиля.

Для моих нужд попробуйте обратиться к приведенному ниже запросу, но Oracle вернул ошибку:

insert into tb_profile_mbx values (seq_profile_mbx.nextval,
     (select id from tb_profile where concil like '%NEXXERA%')
    ,(select id from tb_mbx where mbx like '%NEXXERA%')
    ,null
    ,null);

ORA-01427: однострочный подзапрос возвращает более одной строки

Был бы другой способ выполнить этот запрос?

Заранее спасибо!

1 Ответ

1 голос
/ 04 мая 2020

Вы можете вставить все совпадающие комбинации совпадений, используя:

insert into tb_profile_mbx (id_profile, id_mbx) 
    select p.id, m.id
    from tb_profile p join
         tb_mbx m
         on p.concil like '%NEXXERA%' and m.mbx like '%NEXXERA%';

Я бы порекомендовал запустить select, чтобы увидеть, возвращает ли он нужные значения.

Вы показываете только два столбцы для tb_profile_mbx, поэтому я включил только два столбца в insert.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...