nkdos Posted April 23, 2013 Report Share Posted April 23, 2013 Saludos, Resulta que tengo una duda, tengo una tabla y necesito hacer un match, pero no sé como hacerlo. Resulta que entre otras columnas, tiene USUARIO y MENSAJE. Lo que necesito saber todos los usuarios que enviaron el MENSAJE "BIENVENIDO" y "SALIR", he realizado una QUERY pero quiero asegurarme que sea lo correcto. Lo que tengo es: SELECT USUARIO FROM MITABLA WHERE MITABLA.MENSAJE IN ( 'BIENVENIDO','SALIR' ) GROUP BY MITABLA.USUARIO HAVING COUNT(*) >1 Está bien la forma que estoy haciendo esto? es la mejor forma o existe una mejor? Saludos Link to comment Share on other sites More sharing options...
Ra Posted April 23, 2013 Report Share Posted April 23, 2013 Mal... Si quieres tener el listado de usuarios, elimina el group by y el having y reemplázalo con un distinct Select distinct Usuario.id from blabla (sin el group y sin el having) El group se utliza generalmente para realizar operaciones sobre un grupo de registros (el having para filtrar esos resultados)... Tu no estás haciendo una operación, digamos count, sum, avg, etc. Por lo tanto, no deberías usar group, aunque igual puedes... Te lo planteo así: si fuera un certamen, te pondría medio punto por tu respuesta, no un punto. Salu2. Link to comment Share on other sites More sharing options...
nkdos Posted April 23, 2013 Author Report Share Posted April 23, 2013 Pero según lo que me comentas, al hacerlo de esa forma, sólo podría ver lo usuarios que tienen el mensaje HOLA y los que tienen el mensaje SALIR, no los que tienen ambos mensajes o me equivoco? Link to comment Share on other sites More sharing options...
Ra Posted April 24, 2013 Report Share Posted April 24, 2013 Vas a ver todos los que tengan uno o los dos mensajes. SELECT DISTINCT USUARIO FROM MITABLA WHERE MITABLA.MENSAJE IN ( 'BIENVENIDO','SALIR' ) Si quieres ver los que tengan ambos mensajes tienes que hacer otra consulta distinta... Pensando en que un Usuario puede tener varios 'BIENVENIDO' y/o varios 'SALIR'... Pero si tienen uno de cada uno, y quieres ver los que tienen ambos, la consulta que hiciste es la correcta. Se me olvidó... lo muevo a servidores :tonto: Link to comment Share on other sites More sharing options...
nkdos Posted April 28, 2013 Author Report Share Posted April 28, 2013 Ahh, perfecto, osea si tienen más de 1 BIENVENIDO o SALIR, la query no me funcionaria y tendría que hacer 2 consultas distintas. De ser así, existe forma de unirlas? por ejemplo, con un UNION, algún SELECT anidado o algo? Saludos Link to comment Share on other sites More sharing options...
Ra Posted April 29, 2013 Report Share Posted April 29, 2013 Es que no es necesario... Tienes que definir bien qué es lo que quieres... Si quieres que devuelva: 1- Cuando tiene un 'BIENVENIDO' o 'SALIR'2- Cuando tiene un 'BIENVENIDO' y 'SALIR'3- Cuando tiene uno o más 'BIENVENIDO' o uno o más 'SALIR'4- Cuando tiene uno o más 'BIENVENIDO' y uno o más 'SALIR' Para la 1 y 3 el DISTINCT te sirve... Para las otras 2 necesitas otra consulta que sume por MENSAJE... http://msdn.microsoft.com/en-us/library/ms189461.aspx SAlu2. Link to comment Share on other sites More sharing options...
nkdos Posted May 25, 2013 Author Report Share Posted May 25, 2013 muchas gracias por la ayuda, leeré el articulo saludos Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now