Я строю приложение для простой библиотеки. У меня был стол, называемый книгами; среди столбцов:Как вставить в таблицу из другой таблицы путем сопоставления значений?
books:
book_id | integer | not null default nextval('books_book_id_seq'::regclass)
title | text | not null
author | text | not null default 'unknown'::text
я не планировал делать ничего особенного с авторами, так как все я забочусь о них их имена (так что не присоединиться к таблице, ни авторы таблицы и т.д.) Теперь, однако, Я обнаружил, что API конечных точек для поиска книг по автору понадобится какой-то автор ID:
/browse/author/12345
вместо
/browse/author/Arthur%20C%20Clarke (or whatever)
Я создал отдельную таблицу для авторов:
authors:
author_id | integer | not null default nextval('authors_author_id_seq'::regclass)
author_name | text | not null
и необходимо передать каждую строку книги своему автору через столбец идентификаторов. Я знаю, что мне нужен внешний ключ, но поскольку в таблице книг нет данных, я не могу просто щелкнуть один (все нулевые значения и т. Д.), И в любом случае мне все равно нужно получить все идентификаторы автора и вставить их в правильные строки.
Как я могу вставить правильные author_ids в таблицу книг на основе соответствия значения в существующих столбцах? Я пробовал:
insert into books (author_id) select author_id from authors where (books.author == authors.author_name);
Но, предсказуемо, это слишком наивно.
У меня нет необходимости попробовать это сейчас, но он отлично выглядит! Благодаря! – whiterook6