Заполнение базы данных

#sql

#sql

Вопрос:

Допустим, у нас есть база данных со следующими двумя таблицами: книги и авторы.

В таблице авторов есть столбцы: id, name. В таблице books есть столбцы: id, title, author_id (относится к таблице authors).

Я добавляю новые книги в базу данных вручную, но я хотел бы написать простой sql-скрипт для автоматизации этой задачи. Могу ли я избежать поиска author_id по имени автора в таблице authors (может ли этот шаг быть выполнен базой данных)? Что я хочу, так это ввести название книги и имя автора (т. Е. я не хочу сначала искать author_id), что-то вроде этого:

 //script.sql
INSERT "A quick guide to SQL", "Philip Collins" 
  

Ответ №1:

Вы можете использовать инструкцию SELECT вместе с insert:

 insert into books (title, author_id)
select 'A quick guide to SQL', a.id
from author a
where a.name = 'Philip Collins';
  

Предполагается, что имя автора уникально, в противном случае в books таблицу будет вставлено несколько строк.

Обратите внимание, что в SQL строковые константы заключены в одинарные кавычки ( ' ), двойные кавычки ( " ) предназначены для идентификаторов.

Ответ №2:

Вы можете создать представление:

 create view v_books as
    select b.*, a.name
    from books b join
         authors a
         on b.author_id = a.id;
  

Это сохраненный запрос, и его можно использовать как таблицу.

Комментарии:

1. Полагаю, мне не удалось достаточно четко сформулировать свой вопрос. Я хочу иметь возможность добавлять новую книгу, вводя заголовок и имя (автора) вместо ввода заголовка и идентификатора автора. Могу ли я как-то добиться этого?

2. Вы не можете. Вам нужно выполнить поиск, чтобы получить имя автора, используя идентификатор автора.