inner join query, left join mysql

3

I'm working with the following tables:

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;


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;

What I want to know is the number of times each book has been rented. For this I am doing the query

select l.Nome_livro, count(emp.livro_1) as 'livro 1', count(emp2.livro_2) as 'livro 2'
from livro l 
JOIN emprestimo emp ON emp.livro_1 = l.Id_livro
left join emprestimo emp2 ON emp2.livro_2 = l.Id_livro
group by l.Nome_livro;

But the result seems to be multiplying the column emp2.livro_2 with emp.livro_1 . For example, this is the output I get, when in fact the last line should be 4 and 1 and the penultimate line 3 and 1. The line Os Miseráveis should be 3 and 2, respectively:

    
asked by anonymous 10.06.2017 / 19:10

1 answer

1

For those who might be wanting the answer, I made the solution not with inner or left join , but with Union

SELECT Nome_livro, count(livro_1) as 'mais retirados'
from (select nome_livro, livro_1 
    FROM emprestimo, livro
    where emprestimo.livro_1 = livro.Id_livro
    UNION ALL
    SELECT nome_livro, livro_2
    From emprestimo, livro
    where emprestimo.livro_2 = livro.Id_livro) as x
group by Nome_livro;
    
13.06.2017 / 03:08