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

Duda de consultas anidadas

Estas en el tema de Duda de consultas anidadas en el foro de Mysql en Foros del Web. Buenas, estoy haciendo una tarea y me he topado con un dilema (ya q me complica las consultas anidadas) La subconsulta devuelve 2 columnas y ...
  #1 (permalink)  
Antiguo 26/11/2011, 13:30
 
Fecha de Ingreso: junio-2009
Mensajes: 84
Antigüedad: 14 años, 9 meses
Puntos: 2
Duda de consultas anidadas

Buenas, estoy haciendo una tarea y me he topado con un dilema (ya q me complica las consultas anidadas)

La subconsulta devuelve 2 columnas y lo recibe un "where nombre_f = (subconsulta)"

¿Como puedo hacer para q la comparacion solo se realice en la 2º colunma resultante de la subconsulta que les muestro abajo?
Código MySQL:
Ver original
  1. SELECT nombre_f, count(nombre_f) FROM funcionario f
  2. inner join falta fa on fa.rut_f = f.rut_f
  3. group by nombre_f

PD:
ya tiene limit 1

Última edición por Gaudy; 26/11/2011 a las 13:40
  #2 (permalink)  
Antiguo 26/11/2011, 13:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Duda de consultas anidadas

¿Y para qué estás recuperando en la subconsulta dos columnas, si sólo debes comparar un único valor?
Eso no tiene ningún sentido, ya que el resultado de una subconsulta en el WHERE no puede usarse en ninguna otra parte fuera de él.

Sólo tiene sentido recuperar en una subconsulta del where más de una columna, si vas a compararla con la misma cantidad de columna consideradas como grupo. Algo como por ejemplo:
Código MySQL:
Ver original
  1. ...
  2. WHERE (campo1, campo2) IN (SELECT campoA, campoB FROM tabla2 WHERE condicion);
Esa sintaxis compara el par completo de campo1 + campo2 contra el par campoA+campoB, en el mismo orden de aparición.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 26/11/2011, 14:49
 
Fecha de Ingreso: junio-2009
Mensajes: 84
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Duda de consultas anidadas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿Y para qué estás recuperando en la subconsulta dos columnas, si sólo debes comparar un único valor?
Porq lo q me jode es la 1º linea de la subconsulta:
Código MySQL:
Ver original
  1. SELECT nombre_f, count(nombre_f) FROM funcionario f

Lo que necesito resolver para la consulta completa es obtener el "nombre de funcionario" (nombre_f) que se repite mas en el campo nombre_f, y la unica forma q se ocurre es hacerlo así, en esa subconsulta obtengo el nombre q mas se repite (ni mas ni menos), pero el "Select" tengo q incluir la funcion Count por lo q me imprime tambien la veces q se repite y solo necesito imprimir el nombre q mas se repite.

Esa parte es la q no se hacer
  #4 (permalink)  
Antiguo 26/11/2011, 15:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Duda de consultas anidadas

Estás planteandote incorrectamente el problema, y la sunconsulta.
Si lo que necesitas es el nombre del funcionario que más veces aparece, hay varias formas. Una de las más sencillas sería:
Código MySQL:
Ver original
  1. SELECT nombre_f, count(nombre_f) veces
  2. FROM funcionario f INNER JOIN falta fa on fa.rut_f = f.rut_f
donde no usas una subconsulta.
Y si sólo quieres un campo, sería:
Código MySQL:
Ver original
  1. SELECT nombre_f
  2.     (SELECT nombre_f, count(nombre_f) veces
  3.     FROM funcionario f INNER JOIN falta fa on fa.rut_f = f.rut_f
  4.     GROUP BY veces DESC) T
o bien
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 26/11/2011, 15:26
 
Fecha de Ingreso: junio-2009
Mensajes: 84
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Duda de consultas anidadas

Muchas gracias, es q el dilema q yo tenia es q no puedo imprimir "las veces q se repiten" porq no me lo piden... sino me descuentan puntos, pero con ello aprendo.

Porcierto... la segunda solucion q me dejaste me tira un error: cant group on veces, error 1056, no se porq tira este error

pero me resultó este último:

Código MySQL:
Ver original
  1. SELECT nombre_f Funcionario FROM
  2.   (SELECT nombre_f, count(nombre_f) FROM funcionario f
  3.   inner join falta fa on fa.rut_f = f.rut_f
  4.   group by nombre_f
  5.   order by 2 DESC) T

Etiquetas: anidadas, join, select
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 19:11.