Inner Join causa duplicidade ???

18/03/2015

0

É windows form.
Tendo a tabela " Locação " que está ligada a tabela " ItemLocação ", quando uma locação tem mais de um itemlocação, e carrega o grid de "Locação" aparece uma linha de locação para cada itemlocação.(Como na imagem abaixo)

Neste select que tem um INNER JOIN, para poder filtrar as que não tem a data de devolução.

Alguém sabe como resolver isto ?

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150318-213827.jpg[/img]
Jair Souza

Jair Souza

Responder

Posts

19/03/2015

Marcos P

Jair,

Essa query está correta !

Repare que você fez a ligação das tabelas para poder relacionar dados da Locação ( ID, Locatario, Funcionario, Hora, DataSaida, Valor e DataEntrega ) e um dado do Item ( DataDevolução ).

Ou seja, sua consulta não é mais de locações, mas sim de itens da locação.

Se você realmente precisa da DataDevolução, sugiro focar a query em itens ( colocando mais colunas dessa tabela ).

Se você quer focar em locações, elimine o relacionamento entre as tabelas e tente obter a Data de devolução em outro ponto da aplicação.

Agora, se você quer manter isso assim mesmo, pode tentar :

> Faz sentido relacionar itens sem data de devolução ? Senão, coloque uma condição na condição na query para eliminar esses casos...
> Coloque DISTINCT na query...
> Em ambos os casos as repetições continuaram, mas em menor quantidade

Ok ?!?
Responder

19/03/2015

Ronaldo Lanhellas

É windows form.
Tendo a tabela " Locação " que está ligada a tabela " ItemLocação ", quando uma locação tem mais de um itemlocação, e carrega o grid de "Locação" aparece uma linha de locação para cada itemlocação.(Como na imagem abaixo)

Neste select que tem um INNER JOIN, para poder filtrar as que não tem a data de devolução.

Alguém sabe como resolver isto ?

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150318-213827.jpg[/img]


Você pode usar o DISTINCT() para evitar a duplicidade. Assim:

SELECT distinct(loca) FROM locacao loca inner join item_locacao item on loca.id = item.id_locacao
Responder

19/03/2015

Ronaldo Lanhellas

É windows form.
Tendo a tabela " Locação " que está ligada a tabela " ItemLocação ", quando uma locação tem mais de um itemlocação, e carrega o grid de "Locação" aparece uma linha de locação para cada itemlocação.(Como na imagem abaixo)

Neste select que tem um INNER JOIN, para poder filtrar as que não tem a data de devolução.

Alguém sabe como resolver isto ?

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150318-213827.jpg[/img]


Você pode usar o DISTINCT() para evitar a duplicidade. Assim:

SELECT distinct(loca) FROM locacao loca inner join item_locacao item on loca.id = item.id_locacao
Responder

19/03/2015

Ronaldo Lanhellas

É windows form.
Tendo a tabela " Locação " que está ligada a tabela " ItemLocação ", quando uma locação tem mais de um itemlocação, e carrega o grid de "Locação" aparece uma linha de locação para cada itemlocação.(Como na imagem abaixo)

Neste select que tem um INNER JOIN, para poder filtrar as que não tem a data de devolução.

Alguém sabe como resolver isto ?

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150318-213827.jpg[/img]


Você pode usar o DISTINCT() para evitar a duplicidade. Assim:

SELECT distinct(loca) FROM locacao loca inner join item_locacao item on loca.id = item.id_locacao
Responder

19/03/2015

Jair Souza

Parece que falta alguma coisa...

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150319-145340.jpg[/img]
Responder

19/03/2015

Marcos P

Tenta assim...

[img]http://arquivo.devmedia.com.br/forum/imagem/378439-20150319-152330.png[/img]
Responder

19/03/2015

Jair Souza

Tenta assim...

[img]http://arquivo.devmedia.com.br/forum/imagem/378439-20150319-152330.png[/img]



Valeu, descobrimos simultaneamente.
Responder

19/03/2015

Marcos P

Beleza !!!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar