subquerie mysql

2

Personal I have 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'm 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 output is being

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

Can anyone help me?

Thank you

    
asked by anonymous 09.06.2017 / 02:43

1 answer

4

Work with joins, it's more practical and confuses less. Try to put tables in the table to get a better orientation.

  

Example working:

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';
    
09.06.2017 / 02:50