Tengo tres tablas en mi base de datos

Autor: ayuda | fname | lname

Libro: isbn | titulo | btype | precio | pub_date | pid

Written_by: isbn (referencias book.isbn) | aid (referencias autor.aid)

Estoy intentando devolver el nombre y apellido de todos los autores que han escrito más de dos libros de tipo b "novela". Encontré esta pregunta que seleccionará a los autores que hayan escrito más de dos libros en general, pero no sé cómo modificarla para centrarme en las novelas específicamente. ¿Alguna sugerencia?

select aid, fname, lname 
from author 
where aid in (
    select aid
    from written_by
        join book on book.isbn = written_by.isbn
    group by aid
    having count(*) > 2
); 

Editar: Lo descubrí. Se agregó where btype = "novel" antes de group by y ahora funciona según lo previsto.

0
Richard 12 nov. 2017 a las 05:16

2 respuestas

La mejor respuesta

Hay varias formas de formular esta consulta. Ha usado IN() aquí hay una alternativa que debe conocer.

Usando una combinación interna

select aid, fname as "First Name", lname as "Last Name"
from author a
inner join (
    select aid
    from written_by
        join book on book.isbn = written_by.isbn
    where btype = 'novel'
    group by aid
    having count(*) > 2
    ) g on a.aid = g.aid

Tenga en cuenta que utilice comillas simples para literales como 'novel'. Las comillas dobles se utilizan para identidades como los alias de columna que contienen espacios.

0
Used_By_Already 12 nov. 2017 a las 02:34

Lo averigué. Se agregó where btype = "novel" antes de group by y ahora funciona según lo previsto.

1
Richard 12 nov. 2017 a las 02:27