#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
);
Вы также можете установить идентификатор с помощью триггера. Если вы используете последнюю версию, вы могли бы вместо этого использовать столбец идентификаторов, но вы отметили вопрос с помощью Oracle 11g, где они недоступны.