Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta sencilla, pero no me aclaro

Estas en el tema de Consulta sencilla, pero no me aclaro en el foro de Mysql en Foros del Web. A ver si me podéis ayudar. El planteamiento es encillo, pero no consigo hacer la consulta correctamente. Tenemos una tabla con dos campos, uno son ...
  #1 (permalink)  
Antiguo 30/03/2012, 14:57
 
Fecha de Ingreso: junio-2003
Ubicación: Sevilla
Mensajes: 210
Antigüedad: 21 años, 5 meses
Puntos: 1
Consulta sencilla, pero no me aclaro

A ver si me podéis ayudar.

El planteamiento es encillo, pero no consigo hacer la consulta correctamente.

Tenemos una tabla con dos campos, uno son letras y otro números

letras | numeros
A | 1
A | 3
A | 4
A | 7
B | 2
B | 4
C | 2
C | 4
C | 6
C | 7
C | 9
D | 8
...etc

y quiero hacer una consulta para saber cuales son las letras que tienen asignados los números 4 y 7 (ambos).

Como podéis observar, son la A y la C las que cumplen esta regla. Cual debería ser entonces la consulta para que me devolviera:

letras
A
C


Saludos
__________________
dominioslibres.info
  #2 (permalink)  
Antiguo 30/03/2012, 15:16
Avatar de hackjose  
Fecha de Ingreso: abril-2010
Ubicación: Edo Mexico
Mensajes: 1.178
Antigüedad: 14 años, 7 meses
Puntos: 131
Respuesta: Consulta sencilla, pero no me aclaro

Pienso que seria algo asi mas o menos
Código SQL:
Ver original
  1. SELECT letras, numeros FROM tabla_nombre WHERE numeros = 7 OR numeros = 4
  #3 (permalink)  
Antiguo 30/03/2012, 15:32
 
Fecha de Ingreso: junio-2003
Ubicación: Sevilla
Mensajes: 210
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: Consulta sencilla, pero no me aclaro

Cita:
Iniciado por hackjose Ver Mensaje
Pienso que seria algo asi mas o menos
Código SQL:
Ver original
  1. SELECT letras, numeros FROM tabla_nombre WHERE numeros = 7 OR numeros = 4
No daría resultado puesto que también saldría la B, que tiene asignado el 4, pero no el 7, y lo que busco es que me devuelva sólo las letras que tengan asignado el 4 y el 7 (ambos, no uno de los dos).
__________________
dominioslibres.info
  #4 (permalink)  
Antiguo 30/03/2012, 15:44
 
Fecha de Ingreso: enero-2010
Ubicación: Estelí, Nicaragua
Mensajes: 157
Antigüedad: 14 años, 10 meses
Puntos: 8
Respuesta: Consulta sencilla, pero no me aclaro

Hola, en ese caso tendrias que hacer un count al final. algo asi

Código MySQL:
Ver original
  1. SELECT letras, numeros FROM tabla_nombre WHERE numeros in (7,4)
  2. having cont(*)>=2;

en este caso mayor o igual a dos, porque estoy queriendo extraer los que cumplan con estos dos criterios, si quisiera este criterio "numeros in (7,4,3)", entonces tendria el having count(*)>=3

has la prueba y comentas.

Edito:

La consulta final te quedaría de esta manera

Código MySQL:
Ver original
  1. select letra,numero,idletras from(
  2. select letra,numero,idletras from letras l where l.numero in (7,4)) t1
  3. group by letra having count(*)>1

Última edición por LENINCASCO; 30/03/2012 a las 15:53 Razón: Consulta Final
  #5 (permalink)  
Antiguo 30/03/2012, 16:00
 
Fecha de Ingreso: enero-2010
Ubicación: Estelí, Nicaragua
Mensajes: 157
Antigüedad: 14 años, 10 meses
Puntos: 8
Respuesta: Consulta sencilla, pero no me aclaro

Al final con el count(*) debe ser comparado con la cantidad de elementos que quieres que se cumplan, entonces puede ser por ejemplo >1 (comparando dos elementos), >2 (comparando 3 elementos), o puede ser=2 (dos elementos), =3(tres elementos).

Tu decides.

ojala y te oriente, suerte
  #6 (permalink)  
Antiguo 31/03/2012, 02:13
 
Fecha de Ingreso: junio-2003
Ubicación: Sevilla
Mensajes: 210
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: Consulta sencilla, pero no me aclaro

Gracias LENINCASCO, funcionó. He tenido que crear la variable del "HAVING count" con php y todo perfecto.

Muchas gracias.
__________________
dominioslibres.info

Etiquetas: sencilla, tabla, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:55.