SQL - Varios valores en una misma columna con 'Where'

   
Vista:

Varios valores en una misma columna con 'Where'

Publicado por Fernando (3 intervenciones) el 23/06/2011 12:14:12
Hola a todos.

He estado peleándome bastante con una consulta que no consigo obtener y realmente desconozco si es viable. Os explico.

En una tabla PARTICIPACION tengo las siguientes columnas: IDPARTICIPACION, IDUSUARIO e IDANIO.

Pueden existir varias filas en las que IDUSUARIO sea el mismo pero varia IDANIO.

Lo que quiero obtener son las filas de aquellos IDUSUARIO cuyo IDANIO tengan obligatoriamente los valores 2000,2001,2002 y 2003, por ejemplo.

Para intentar explicarme mejor, mi idea sería algo así:

select IDUSUARIO from PARTICIPACION where IDANIO=(2000 AND 2001 AND 2002 AND 2003);

Claramente, esto no funciona pero no hallo la forma.

Un saludo y gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Varios valores en una misma columna con 'Where'

Publicado por Leonardo Josué (880 intervenciones) el 23/06/2011 18:05:26
Hola Fernando, esto es básico de SQL, por lo que me parece extraño que no lo sepas, sería conveniente que leyeras cualquier manual de fundamentos de SQL si es que apenas estás comenzando a aprender.

Para hacer lo que quieres, podrías utilizar el operador IN, quedando de la siguiente manera:

1
select IDUSUARIO from PARTICIPACION where IDANIO IN (2000, 2001, 2002, 2003);



o si tu campo es de tipo numérico podrías hacerlo utilizando rangos (ya sea con BETWEEN o con >= y <=)

1
select IDUSUARIO from PARTICIPACION where IDANIO BETWEEN 2000 and 2003;


o

1
select IDUSUARIO from PARTICIPACION where IDANIO >= 2000 and IDANIO <= 2003;


Saludos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Varios valores en una misma columna con 'Where'

Publicado por Leonardo Josué (880 intervenciones) el 23/06/2011 18:24:10
Hola de nuevo Fernando, leyendo nuevamente el foro, creo que entendí mal lo que quieres hacer, una disculpa por eso, veamos si entendí correctamente:

supongamos que tu tabla PARTICIPACION tiene los siguientes datos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
IDPARTICIPACION  IDUSUARIO  IDANIO
---------------  ---------  ------
              1  uno          2000
              2  uno          2001
              3  uno          2002
              4  uno          2003
              5  dos          2000
              7  dos          2001
              8  dos          2002
              9  dos          2003
             10  dos          2004
             11  tres         2000
             12  tres         2001
             13  tres         2002
             14  tres         2003
             15  cuatro       2000
             16  cuatro       2001


aquí se puede observar que los idusuarios UNO Y TRES tienen un registro para los años del 2000 al 2003, el idusuario DOS también los tiene, pero además tiene un registro con el año 2004, el idusuario CUATRO no tiene un registro para cada año, según lo que pude entender, tu quisieras obtener los registros para los idusuarios UNO y TRES, esto podrías obtenerlo más o menos así:

1
2
3
4
5
6
7
8
select T1.* from participacion T1
inner join
(select idusuario, count(*) from participacion p1
where idanio in (2000,2001,2002,2003) and not exists
(select idusuario from participacion p2 where p2.idusuario = p1.idusuario and
idanio not in (2000,2001,2002,2003))
group by idusuario
having count(*) = 4) T2 on T1.idusuario = T2.idusuario


dale un vistazo a ver si es lo que necesitas, de lo contrario sería conveniente que no pongas algunos datos de ejemplo para poder hacer pruebas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Varios valores en una misma columna con 'Where'

Publicado por Fernando (3 intervenciones) el 24/06/2011 09:56:48
Hola Leonardo, gracias por tus respuestas.

He probado la última consulta que mencionas pero me da un error en el alias T2. Me dice que no se ha especificado ninguna columna para la columna2 de T2. Es en SQL Server.

La verdad es que sí que estoy un poco verde, hace años que no me peleaba con SQL.

Lo que pretendo es obtener aquellos usuarios que registrados los 4 años. Que solo me muestre los que cumplan esa condición, si han venido 3, 2 o 1 no lo quiero.

Te pongo una muestra:

TABLA PARTICIPACIÓN
===================
____________  ___________ _______
|idParticipac| |idUsuario| |idAnio|
|------------| |---------| |------| 
|    0001    | |   101   | | 2000 |
|    0002    | |   102   | | 2000 |
|    0003    | |   103   | | 2000 |
|    0004    | |   104   | | 2000 |
|    0005    | |   101   | | 2001 |
|    0006    | |   102   | | 2001 |
|    0007    | |   104   | | 2001 |
|    0008    | |   101   | | 2002 |
|    0009    | |   102   | | 2002 |
|    0010    | |   103   | | 2002 |
|    0011    | |   104   | | 2002 |
|    0012    | |   101   | | 2003 |
|    0013    | |   102   | | 2003 |
|    0014    | |   103   | | 2003 |
|    0015    | |   101   | | 2004 |
|    0016    | |   102   | | 2004 |
|    0017    | |   103   | | 2004 |
-------------- ----------- --------

Aquellos idUsuario que cumplan la condición de haber participado los los 4 años son: 101 y 102.

Imagino que será posible pero no lo consigo.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Varios valores en una misma columna con 'Where'

Publicado por Leonardo Josué (880 intervenciones) el 24/06/2011 16:14:18
Hola de nuevo Fernando...

Sería conveniente que nos comentaras con qué bd estás utilizando, para poder hacer pruebas. El error que te marca la consulta creo que es bastante claro, aunque no en todos los manejadores lo marcaría, lo único que tienes que hacer es ponerle un alias al campo count(*) de la consulta interna, ya que este es un campo calculado y por tanto no tiene un nombre asignado...

1
select idusuario, count(*) total from


Ahora bien, regresando al planteamiento del problema, dices que quieres los id's que cumplan con la condición de haber participado en los 4 años (aunque en tu tabla hay 5 años), si sólo necesitas el id, lo único que necesitarías es el select interno

1
2
3
4
select idusuario from participacion p1
where idanio in (2000,2001,2002,2003)
group by idusuario
having count(*) = 4


Saludos
Leo.



saludos
leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Varios valores en una misma columna con 'Where'

Publicado por Fernando (2 intervenciones) el 24/06/2011 21:25:57
Eres un crack Leo!

Sí, he puesto 5 años, sorry.

Pensaba que estaba verde, pero veo que estoy muy verde!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Varios valores en una misma columna con 'Where'

Publicado por Leonardo Josué (880 intervenciones) el 24/06/2011 23:04:09
Jejeje, es solo cuestión de leer un poco y bueno, para eso están los foros, podrías darle un vistazo a lo que aquí se pregunta, estoy seguro que te algunas cosas te podrán ser de utilizad en un futuro.

Un placer haber sido de ayuda.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Varios valores en una misma columna con 'Where'

Publicado por Daniel (1 intervención) el 11/01/2016 14:35:42
Gracias!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Varios valores en una misma columna con 'Where'

Publicado por carlos (1 intervención) el 28/07/2016 19:09:31
Hola, solo tienes que modificar lo siguiente

select IDUSUARIO from PARTICIPACION
where IDANIO in (2000, 2001, 2002, 2003)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar