#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. Вы не можете. Вам нужно выполнить поиск, чтобы получить имя автора, используя идентификатор автора.