TransWikia.com

Filas duplicadas en sql usando INNER JOIN

Stack Overflow en español Asked by Manny on February 10, 2021

tengo dos tablas en sql que comparten mas de dos campos en comun, pero yo quiero traer todos los folios que sean iguales entre ambas tablas pero que estos no se dupliquen, por ejemplo:

 Table1
 FOLIO, COMENTARIO, NOMBRE, DPTO, CANTIDAD, STATUS.   EMPLE
 14     mi comenta  juan     1      15        abierto 4562
 14     mi comenta  juan     1      15        abierto 4562
 14     mi comenta  juan     1      12        abierto 4562
 17     mi comenta  juan     1      25         abierto 4562

 Table2
 FOLIO, COMENTARIO, NOMBRE, DPTO, CANTIDAD, COSTO, FECHA,    EMPLE
 14     mi comenta  juan     1      15       45.25 9/18/2020  4562
 14     mi comenta  juan     1      15       45.25 9/18/2020  4562
 14     mi comenta  juan     1      12       45.25 9/18/2020  4562
 17     mi comenta  juan     1      25       25.25 9/18/2020  4562

Estoy haciendo un inner join entre las dos tablas pero me trae 4 resultados:

SELECT distinct TOP 30 T1.FOLIO,T1.NOMBRE,T1.COMENTARIO,T2.FECHA,T1.ESTATUS
FROM table1 as T1 
inner join table2 as T2 on T2.FOLIO = T1.FOLIO 
WHERE T1.EMPLE=4562 AND T1.STATUS <> 'Cerrado'  

Lo que busco es que solo me traiga dos filas, una con el folio 14 y otra 17 sin repetidos, ahora mismo me regresa 3 filas del 14 y 1 del 17, ya aplique disctict pero ni asi los filtra.

2 Answers

Para los datos que muestras en las tablas y las columnas que estas sacando en el select, la sentencia distinct debería sacarte solo dos filas, la 14 y la 17. Si te esta desglozando en 3 filas la 14 es porque en alguna o varias columnas de los folios 14 de la T1 tienes diferentes datos (imagino que sera por COMENTARIO).

Answered by ManuelV on February 10, 2021

Como primera medida, si las tablas estan asi, pues estan mal...

Las tablas tienen exactamente los mismos datos, por lo tanto no estan en tercera forma normal (normalizadas) y eso es un grave error de diseño.. Si hubiera escrito mal el nombre, para arreglarlo, tenes que cambiarlo en montones de registros, cosa que no esta bien...

Porque trae muchas filas? porque inner join le dice como unir las tablas, entonces vos le decis que una solo por ese campo, entonces agarra una fila de la tabla t1, y usando eso forma de unir, la une con todos los registros de la otra tabla que cumplen esa condicion...

Ahora, para solucionar tu query, tu inner join debe incluir todos los campos que son iguales en las dos tablas.

Por lo tanto, para simplificar, tu inner join debe ser:

...
inner join T2.FOLIO = T1.FOLIO 
    and t2.comentario = t1.comentario 
    and t1.nombre = t2.nombre 
    and t1.dpto = t2.dpto 
    and t1.cantidad = t2.cantidad 
    and t1.emple = t2.emple
...

Answered by gbianchi on February 10, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP