Comment puis-je l'insérer dans une table à partir d'une autre table par correspondance sur des valeurs?

Je suis en train de construire une simple application de la bibliothèque. J'ai eu une table appelée livres; parmi ses colonnes sont:

books:
book_id   | integer | not null default nextval('books_book_id_seq'::regclass)
title     | text    | not null
author    | text    | not null default 'unknown'::text

Je n'avais pas prévu de faire quelque chose de spécial avec le nom des auteurs puisque tous je me soucie d'eux, ce sont leurs noms (donc pas de table de jointure, aucun des auteurs de table, etc.) MAINTENANT, cependant, je découvre que l'API de point de terminaison pour trouver des livres par auteur aura besoin d'une sorte d'id de l'auteur:

/browse/author/12345

au lieu de

/browse/author/Arthur%20C%20Clarke (or whatever)

J'ai créé un tableau distinct pour les auteurs:

authors:
author_id   | integer | not null default nextval('authors_author_id_seq'::regclass)
author_name | text    | not null

et le besoin de consulter, pour chaque ouvrage en ligne à son auteur via la colonne id. Je sais que je vais avoir besoin d'une clé étrangère, mais comme il n'y a pas de données dans la table livres je ne peux pas tout simplement une claque dans (toutes les valeurs null, etc) et, en tout cas, j'ai encore besoin d'obtenir toutes les id auteur et les insérer dans les lignes correctes.

Comment puis-je insérer la bonne author_ids dans les livres de la table basée sur la correspondance de la valeur dans les colonnes existantes? J'ai essayé:

insert into books (author_id) select author_id from authors where (books.author == authors.author_name);

Mais prévisible qui est trop naïve.

OriginalL'auteur whiterook6 | 2013-06-14