mysql subquerie

Asked

Viewed 36 times

2

Guys I’m with the following structure:

CREATE TABLE Cliente
(     Id_cliente int NOT NULL,
      Nome_cliente CHAR(30) NOT NULL,
      Endereco CHAR(40),
      Telefone char(12),
      PRIMARY KEY (Id_cliente)
) Engine=InnoDB;

CREATE TABLE Emprestimo
(   operacao int NOT NULL,
    data_emp date NOT NULL,
    data_dev date NOT NULL,    
    cliente int, 
    livro_1 int NOT NULL, 
    livro_2 int, 
    PRIMARY KEY (operacao),
    FOREIGN KEY (cliente) REFERENCES Cliente(Id_cliente), 
    FOREIGN KEY (livro_1) REFERENCES livro(Id_livro), 
    FOREIGN KEY (livro_2) REFERENCES livro(Id_livro)
) Engine=InnoDB;

CREATE TABLE livro
(     Id_livro int NOT NULL,
      Nome_livro CHAR(40) NOT NULL,
      Pg int,
      Edicao int, 
      Editora int NOT NULL,
      Assunto int NOT NULL, 
      Preco decimal (5,2) NOT NULL,
      PRIMARY KEY (Id_livro),
      FOREIGN KEY (Editora) REFERENCES Editora(Id_editora),
      FOREIGN KEY (Assunto) REFERENCES Assunto(Id_assunto)
) Engine=InnoDB;

With these 3 tables I am doing the following search:

select nome_cliente, operacao, nome_livro, (select livro_2 from emprestimo, livro where emprestimo.livro_2 = livro.Id_livro and emprestimo.cliente = cliente.Id_cliente and data_emp >= '2017-01-01' and data_dev <= '2017-03-31')as livro_2
from cliente, emprestimo, livro
where emprestimo.livro_1 = livro.Id_livro
and emprestimo.cliente = cliente.Id_cliente
and data_emp >= '2017-01-01'
and data_dev <= '2017-03-31';

my exit is being inserir a descrição da imagem aqui

But I need to put the names of the books instead of the code of livro_2, but my subquerie is not working.

Can someone help me?

Thank you

  • The name of the book would be a secondary name?

  • 1

    @Sorack this, the person withdraws 2 books, and was not able to put the name of the second in the result. But Hiago Souza’s reply worked perfectly. Thank you

1 answer

4


Work with joins, is more practical and confuses less. Try to put in the tables to better orient yourself.

Working example:

SELECT c.nome_cliente, e.operacao, l1.nome_livro as livro_1, l2.nome_livro as livro_2
FROM
cliente c
INNER JOIN emprestimo e ON e.cliente = c.Id_cliente 
LEFT JOIN livro l1 ON l1.Id_livro = e.livro_1
LEFT JOIN livro l2 ON l2.Id_livro = e.livro_2
WHERE
e.data_emp >= '2017-01-01'
AND e.data_dev <= '2017-03-31';

Browser other questions tagged

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