Consulta multitabla con union
-
viernes, 15 de abril de 2011 21:01
Buenas.
Estoy con un problema con una consulta. tengo que listar las personas que estan en una tabla y eventualmente las que no estan y mostrarlas de acuerdo a una semana (todas las semanas deben subir archivos a la bd). por ende tengo que distiguir que diga persona subio y persona no subio archivo. pero lo que me pasa es que se me repiten los valores porque estoy utilizando union para la realizacion de la consulta, ¿como puedo dicriminar entre la consulta de un select y otro select al unirlos con el union? para que los valores no se repitan.
Todas las respuestas
-
viernes, 15 de abril de 2011 21:25
En cada Select tendrás que definir sus propias condiciones dentro del WHERE
Por ejemplo:
select campoX, campoA from tabla where camposcondiciones = A
union
select campoX, campoA from tabla where camposcondiciones = BSi las condiciones de las dos Select (Where), definen registros distintos, no tendrás duplicados en el resultado.
Si nos pasas datos mas concretos, como el diseño de la tabla, y nos detallas que resultado quieres obtener, intentaremos orientarte ajustándonos mas ...
Norman M. Pardell||Microsoft Certified IT Professional|| Database Administrator. Database Developer. SQL Server 2008
- Propuesto como respuesta Eduardo PorteschellerMicrosoft Community Contributor, Moderator lunes, 18 de abril de 2011 14:32
-
lunes, 18 de abril de 2011 14:32Propietario
Hola Victor Molina,
Aqui tienes todo lo que necesitas del UNION
http://technet.microsoft.com/es-es/library/ms180026.aspx
Espero que te ayude!
Saludos
Eduardo Portescheller - LATAM Forum Support Engineer
Microsoft Corporation- Propuesto como respuesta Eduardo PorteschellerMicrosoft Community Contributor, Moderator lunes, 18 de abril de 2011 14:32
-
lunes, 18 de abril de 2011 15:49Moderador
Hola Victor
de todas formas, ccreo que tu problema no es el union, sino que no no hemos captado tu problema realmente.
¿puede ser que quieras subir todos aquellos registros que aún no han subido? ¿tienes una primary key que los distinga? Si es así, es "fácil". Lo que tienes que hacer no es usar union, sino combinar con left join tus tablas algo así
insert into tutablaexistente
Select tutablaimportada.* from tutablaexistente right join tutablaimportada on tutablaexistente.clave=tutablaimportada.clave where tutablaexistente.clave is null
Espero que se entienda.
Comparte lo que sepas, aprende lo que no sepas (FGG) -
viernes, 22 de abril de 2011 15:26Moderador
Hola.
¿Resolviste el problema? En caso negativo, lo que yo he creído interpretar es que obtienes las personas que están con una consulta y las que no están con otra, relacionadas mediante una select de unión y luego no sabes cómo distinguir qué registros provienen de cada una de las dos consultas. Si es ese, te sugiero el siguiente mecanismo (está simplificado con fines pedagígicos, se puede afinar bastante):
Select SubioFichero = 'SI', Usuario from Tabla1 where ....--Filtro que diga los usuarios que sí subieron ficheros union Select SubioFichero = 'NO', Usuario from Tabla2 where ... --Filtro que diga los usuarios que no subieron ficheros and Usuario not in ( --Aquí pones la primera consulta select Usuario from Tabla1 where ....--Filtro que diga los usuarios que sí subieron ficheros )
De esta manera, los usuarios están identificados (sabes de qué select provienen) y, sin llegar a entrar en que la segunda de las consultas debe tener algún tipo de error, quitas los usuarios que aparecieron en la primera de las consultas.
Intenténtalo y déjanos saber qué tal de fue.
Alberto López Grande
SQL Server MVP
Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande- Propuesto como respuesta qwalgrandeMVP, Moderator viernes, 22 de abril de 2011 15:26
- Marcado como respuesta qwalgrandeMVP, Moderator miércoles, 27 de abril de 2011 18:10

