Digamos que tenemos una base de datos con las siguientes dos tablas: libros y autores.

La tabla de autores tiene columnas: id, nombre. La tabla de libros tiene columnas: id, title, author_id (se refiere a la tabla de autores).

Agrego libros nuevos a la base de datos manualmente, pero me gustaría escribir un script sql simple para automatizar esta tarea. ¿Puedo evitar buscar author_id por nombre de autor en la tabla de autores (puede realizar este paso una base de datos)? Lo que quiero es ingresar el título del libro y el nombre del autor (es decir, no quiero buscar el author_id primero), algo como esto:

//script.sql
INSERT "A quick guide to SQL", "Philip Collins" 
sql
-1
Daniel 16 ago. 2020 a las 14:49

2 respuestas

La mejor respuesta

Puede usar una instrucción SELECT junto con una inserción:

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

Esto supone que el nombre del autor es único, de lo contrario, insertará varias filas en la tabla books.

Tenga en cuenta que en SQL, las constantes de cadena se incluyen entre comillas simples ('), las comillas dobles (") son para identificadores.

1
a_horse_with_no_name 16 ago. 2020 a las 14:26

Puede crear una vista:

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

Esta es una consulta almacenada y se puede utilizar como una tabla.

1
Gordon Linoff 16 ago. 2020 a las 11:51