Search for information not directly related in the Database

Asked

Viewed 22 times

0

I would like to select from a database that has the tables Book, Author and Publisher, the attributes Author name, Last name, Book title and Publisher of tables that are not directly related (so to speak), this is the structure of the bank;


create table if not exists Livro(
Id_livro tinyint auto_increment,
Titulo_livro varchar(45) not null,
Data_publicacao_livro date not null,
primary key(Id_livro)) default charset = utf8;

create table if not exists Autor(
Id_autor tinyint auto_increment,
Nome_autor varchar(45) not null,
Sobrenome_autor varchar(45) not null,
primary key(Id_autor)) default charset = utf8;

create table if not exists Editora(
Id_editora tinyint auto_increment,
Nome_editora varchar(45) not null,
primary key(Id_editora)) default charset = utf8;

/*Um livro pode ter mais de um autor bem como um mesmo titulo pode ser publicado por mais de uma editora 
dessa forma temos um relacionamento de muitos para muitos com cada uma das tabelas*/

create table if not exists Publicado( -- Essa tabela relaciona o livro com a editora
Id_livro tinyint not null,
Id_editora tinyint not null,
primary key(Id_livro, Id_editora),
foreign key(Id_livro) references Livro(Id_livro),
foreign key(Id_editora) references Editora(Id_editora));

create table if not exists Escrito( -- Relaciona o livro com os autores
Id_livro tinyint not null,
Id_autor tinyint not null,
primary key(Id_livro, Id_autor),
foreign key(Id_livro) references Livro(Id_livro),
foreign key(Id_autor) references Autor(Id_autor));

Do I use a simple Inner Join? or is it necessary to make a subconsulta?

  • By the way I use the Mariadb

  • It’s not clear what you want to do, what information you want to read?

1 answer

0

I believe it’s just a simple select with joins:

Select 
e.id_livro,
a.nome_autor,
a.sobrenome_autor,
l.titulo_livro,
coalesce(d.nome_editora,'Não Publicado') as nome_editora
from escrito e
inner join livro l on l.id_livro = e.id_livro
inner join autor a on a.id_autor = e.id_autor
left outer join publicado p on p.id_livro = e.id_livro
left outer join editora d on d.id_editora = p.id_editora
  • I believe the solution is that proposed by Rovann

  • What is this coalition for? Sorry I’m a beginner in SQL

  • I considered that there is the possibility that a book has not been published, so it would not be in the table publicado (otherwise, I don’t see why this table exists) so I used the left Outer Join to bring the table, and if the column nome_editora is null, meaning it has not been published. The coalition returns the first non-null value that is in its parameters.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.