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.
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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP