Consulta SQL dando resultados repetidos

4 respostas
ThomasCouto

SELECT f.nome, f.nacionalidade, f.categoria, f.copias, c.nome, c.preco, IF(@datas:=(DATEDIFF(data_devolucao, data_locacao)), @datas, IF(@data2:=(DATEDIFF(NOW(), data_locacao)), @data2, 0)) AS diarias FROM filme f, categoria c, locacao l WHERE c.id = f.categoria

e ele está duplicando com linhas que possuem resultados inexistentes

4 Respostas

peczenyj

não ta duplicado pois as diarias são diferentes…

ThomasCouto

olá amigao, esta duplicado sim, pois cada filme só tem uma diaria, e ele está atribuindo diarias inexistentes à alguns filmes, ok?

douglasrauber

qual a estruturda das tabelas? não taltando a tabela locação no where?

ThomasCouto

isso que eu pensei, mas eu nao posso colocar locacao no where pois assim só vai mostrar os filmes repetidos, mas eu tenho que mostrar todos os filmes, e os que nao possuirem diaria (observe o IF ) ele atribui valor 0 (zero)

entendeu?

as estruturas das tabelas sao:

CREATE TABLE usuario (
      login VARCHAR(20) NOT NULL,
      senha VARCHAR(20) NOT NULL,
      nome VARCHAR(20) NOT NULL,
PRIMARY KEY(login));

CREATE TABLE role (
      login VARCHAR(20) NOT NULL,
      role VARCHAR(20) NOT NULL,
PRIMARY KEY(login,role),
FOREIGN KEY (login) REFERENCES usuario(login)
                     ON DELETE CASCADE);

CREATE TABLE categoria (
      id BIGINT AUTO_INCREMENT NOT NULL,
      nome VARCHAR(20) NOT NULL,
      cor VARCHAR(50) NOT NULL,
      preco DOUBLE NOT NULL,
PRIMARY KEY(id));

CREATE TABLE genero (
      id BIGINT AUTO_INCREMENT NOT NULL,
      nome VARCHAR(20) NOT NULL,
PRIMARY KEY(id));

CREATE TABLE filme (
      id BIGINT AUTO_INCREMENT NOT NULL,
      nome VARCHAR(20) NOT NULL,
      nacionalidade VARCHAR(50) NOT NULL,
      copias INT NOT NULL,
      categoria BIGINT NOT NULL,
      data_insercao TIMESTAMP NOT NULL,
PRIMARY KEY(id),
FOREIGN KEY (categoria) REFERENCES categoria(id)
                     ON DELETE CASCADE);

CREATE TABLE filme_genero (
      filme BIGINT NOT NULL,
      genero BIGINT NOT NULL,
 FOREIGN KEY (filme) REFERENCES filme(id)
                     ON DELETE CASCADE,
 FOREIGN KEY (genero) REFERENCES genero(id)
                     ON DELETE CASCADE);

 CREATE TABLE locacao (
      id BIGINT AUTO_INCREMENT NOT NULL,
      cliente VARCHAR(20) NOT NULL,
      data_locacao TIMESTAMP NOT NULL,
      data_devolucao TIMESTAMP NOT NULL,
      status VARCHAR(20) NOT NULL,
      rua VARCHAR(50) NOT NULL,
      numero INT NOT NULL,
      bairro VARCHAR(20) NOT NULL,
PRIMARY KEY(id),
FOREIGN KEY (cliente) REFERENCES usuario(login)
                     ON DELETE CASCADE);

CREATE TABLE filme_locacao (
      locacao BIGINT NOT NULL,
      filme BIGINT NOT NULL,
PRIMARY KEY(filme,locacao),
FOREIGN KEY (locacao) REFERENCES locacao(id)
                     ON DELETE CASCADE,
FOREIGN KEY (filme) REFERENCES filme(id)
                     ON DELETE CASCADE);
Criado 18 de maio de 2006
Ultima resposta 18 de mai. de 2006
Respostas 4
Participantes 3