我正在构建一个简单的库应用程序。我有一张叫书的桌子;它的列包括:
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
并且需要通过 id 列将每一本书的行引用给它的作者。我知道我需要一个外键,但是由于 books 表中没有数据,我不能简单地输入一个(所有空值等),无论如何我仍然需要获取所有作者 ID 并将它们插入正确的行。
如何根据匹配现有列中的值将正确的 author_ids 插入到 books 表中?我试过了:
insert into books (author_id) select author_id from authors where (books.author == authors.author_name);
但可以预见的是,这太天真了。