Вставка данных в таблицу(столбцы mutliple), содержащую первичный ключ, из других данных, содержащих данные, кроме первичного ключа

#sql #oracle #oracle11g #oracle-sqldeveloper

Вопрос:

У меня есть таблица, в которой есть 3 столбца ID(первичный ключ), Имя, Город.

Мне нужно импортировать данные из другой таблицы, в которой есть только имя и город.

Я могу написать вставить в таблицу 1(Имя, город), выбрать имя, город из таблицы 2.

Но тогда мне нужен идентификатор в таблице 1, который нужно вставить с помощью последовательности.

Я попробовал это:

вставьте в таблицу 1 значения(идентификатор, имя,город) (далее, выберите отдельное имя, город из таблицы 2). Но я получаю сообщение об ошибке, в котором говорится о недостаточном количестве значений.

Я пробую это в SQL Oracle. Может кто-нибудь, пожалуйста, помочь мне с этим?

Комментарии:

1. Положите свой seq.nextval в select

2. не сработало @HoneyBadger. придавая мне отсутствующее выражение.

3. Пожалуйста, отредактируйте вопрос и покажите фактические инструкции CREATE TABLE для таблицы

Ответ №1:

Вы смешиваете insert ... values синтаксис insert ... select и.

Вы отредактировали свой вопрос , включив distinct в него, подразумевая, что у вас есть повторяющиеся пары имя/город, которые вы хотите подавить; но ни одна из версий не получает ошибку, о которой вы сообщили. Если у вас нет дубликатов, вы можете просто сделать:

 insert into table1(ID, Name,City)
select seq.nextval, name, city from table2;
 

Если у вас есть дубликаты, вы не можете просто добавить distinct ключевое слово, но вы можете использовать подзапрос:

 insert into table1 (id, name, city)
select seq.nextval, name, city
from (
  select distinct name, city
  from table2
);
 

db<>скрипка

Вы также можете установить идентификатор с помощью триггера. Если вы используете последнюю версию, вы могли бы вместо этого использовать столбец идентификаторов, но вы отметили вопрос с помощью Oracle 11g, где они недоступны.