#sql #oracle
#sql #Oracle
Вопрос:
Я думаю, это простой вопрос.
У меня есть эти 2 таблицы:
ID | ИМЯ ИСПОЛНИТЕЛЯ |
---|---|
1 | Плохой кролик |
3 | Jbalvin |
И
Идентификатор песни | ИМЯ ИСПОЛНИТЕЛЯ |
---|---|
100 | Плохой кролик |
101 | Jbalvin |
И я хотел бы заменить имя исполнителя во второй таблице на идентификатор исполнителя.
Спасибо!!!!
Комментарии:
1. Вы можете использовать внутреннее соединение вместе с соответствующими столбцами artist_name, такими как t1.artist_name = t2.artist_name
Ответ №1:
ВСТАВКА, ЗАМЕНА и т. Д. Имеют очень точные значения в SQL, потому что они являются командами. В будущем, пожалуйста, используйте правильную терминологию при задании вопроса.
В этом случае я предполагаю, что вы хотите заменить ARTIST_ID на ARTIST_NAME; обычно это будет ОБНОВЛЕНИЕ. Однако использование неправильного столбца (и неправильного типа данных) является плохой практикой, которая приведет вас и ваших коллег в замешательство. Поэтому вам нужно изменить имя столбца в целевой таблице. Существуют различные способы достижения этой цели; тот, который я описываю ниже, является самым прощающим в отношении ошибок и исключений.
Итак, давайте сделаем ссылку на внешний ключ между таблицей 1 ( artists
) и таблицей 2 ( songs
). Следующий пример может содержать больше шагов, чем вам требуется, и в этом случае опустите то, что вы не хотите делать.
alter table songs add artist_id number / -- use MERGE to update one table with values from another merge into songs song using (select * from artists) artt on (artt.artist_name = song.artist_name) when matched then update song.artist_id = artt.artist_id / -- this step will fail if you have values of ARTIST_NAME in SONGS -- which don't match anything in ARTISTS alter table songs modify artist_id not null / -- if the last step succeeded, normalise the data model alter table songs drop column artist_name /
Кроме того, вы должны добавить внешний ключ (при условии, что у ХУДОЖНИКОВ есть идентификатор АРТИСТА в качестве первичного ключа…
alter table songs add constraint song_artt_fk foreign key (artist_id) references artists /