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

Problema con SubConsulta MySQL

Estas en el tema de Problema con SubConsulta MySQL en el foro de Mysql en Foros del Web. Hola a todos...!!! Esta consulta MySQL me da problemas y no se como solucionarlo, ya que no manejo bien las subconsultas. Al hacer esta consulta ...
  #1 (permalink)  
Antiguo 08/11/2013, 13:46
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Problema con SubConsulta MySQL

Hola a todos...!!!

Esta consulta MySQL me da problemas y no se como solucionarlo, ya que no manejo bien las subconsultas.

Al hacer esta consulta a la BD:
Código MySQL:
Ver original
  1. SELECT count(ID) as pcount
  2. FROM mitabla
  3. WHERE (apellido, nombre) IN(SELECT apellido, nombre FROM mitabla WHERE id_encomun < '1'
  4. GROUP BY apellido, nombre HAVING COUNT(*) > 1)

Nunca termina de hacer la consulta y en lo mejor de los casos, me dió este error:

Código:
Warning: mysql_query() [function.mysql-query]: Unable to save result set...
Por favor, alguien me puede orientar o ayudar?

Gracias!

Última edición por gnzsoloyo; 08/11/2013 a las 14:22 Razón: Codigo de programacion no permitido en foros de BBDD
  #2 (permalink)  
Antiguo 08/11/2013, 14:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Problema con SubConsulta MySQL

Prueba así (yo no he probado)
Código MySQL:
Ver original
  1. SELECT count(ID) as pcount
  2.     FROM mitabla m
  3.     INNER JOIN (SELECT apellido, nombre FROM mitabla WHERE id_encomun < '1'
  4.     GROUP BY apellido, nombre HAVING COUNT(*) > 1)t1 ON m.apellido = t1.apellido AND m.nombre = t1.nombre
  #3 (permalink)  
Antiguo 08/11/2013, 15:01
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Problema con SubConsulta MySQL

Hola jurena, gracias por ayudarme...

No, sucede exactamente lo mismo, no termina nunca de hacer la consulta!!!
  #4 (permalink)  
Antiguo 09/11/2013, 02:31
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Problema con SubConsulta MySQL

Bien, eso era respecto a la sintaxis. Ahora vamos con los datos.
Código MySQL:
Ver original
  1. WHERE id_encomun < '1'
  2.     GROUP BY apellido, nombre HAVING COUNT(*) > 1

¿a qué te refieres con id_encomun menor que '1'? Fíjate que he marcado con negrita 'menor'. ¿Es eso lo que realmente buscas? Explícanos ahora la lógica de tu consulta, lo que quieres sacar.

Última edición por jurena; 09/11/2013 a las 02:52
  #5 (permalink)  
Antiguo 09/11/2013, 05:19
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Problema con SubConsulta MySQL

Tengo en "mitabla" un campo "id_encomun" con valor "0" por defecto. Por ejemplo, en algunos registros, con igual apellido y Nombre, en éste campo "id_encomun" el valor puede ser mayor que "0".

Por lo tanto, para excluir del resultado de la consulta esos registros que tengan valor del campo "id_encomun" mayor que "0", pongo como condición (WHERE) que cuente (COUNT) sólo los registros que tengan el campo "id_encomun" < (Menor) que 1, lo que podría ser también, si no me equivoco, = (Igual) que 0.
  #6 (permalink)  
Antiguo 09/11/2013, 10:32
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Problema con SubConsulta MySQL

dinos qué buscas exactamente, si es el número de personas cuyo id_encomun = 0 sin que haya repeticiones entre ellos. ¿Es eso o alguna otra cosa?

Código MySQL:
Ver original
  1. SELECT COUNT(DISTINCT nombre, apellido) total
  2.  FROM mitabla WHERE id_encomun = 0
  #7 (permalink)  
Antiguo 09/11/2013, 12:27
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Problema con SubConsulta MySQL

Gracias por la paciencia jurena...

Busco el número de registros cuyo campo "apellido" y campo "nombre" sean iguales y el campo "id_encomun" = 0

Saber este número, me es necesario para hacer la paginación de la siguiente consulta que es la que me lista todos los registros:

Código:
SELECT *
FROM mitabla WHERE id_encomun = '0'
GROUP BY apellido, nombre HAVING COUNT(*) > 1 
ORDER BY apellido, nombre LIMIT variable" . variable;
Que al ir haciendo pruebas parece ser que, esta última consulta que imprime los registros, es la que tarda mucho en realizarse.
  #8 (permalink)  
Antiguo 09/11/2013, 14:08
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Problema con SubConsulta MySQL

Paulkees,
¿has probado la que te propuse? Esta que me dices tú no puede darte el número sino el listado de los que se repiten más de una vez, aunque solo te los mostrará una vez.
  #9 (permalink)  
Antiguo 09/11/2013, 14:21
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Problema con SubConsulta MySQL

Exactamente... la que puse último es la que me da el listato de todos los que se repiten más de una ves y es la que está tardando mucho en imprimirse.

La que me propusiste funcina perfectamente para imprimir el número total.

Lastima que no puedo mostrar código, de esa forma entenderías mucho mejor.
  #10 (permalink)  
Antiguo 10/11/2013, 02:37
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Problema con SubConsulta MySQL

Entendido, ahora quieres la lista de los que se repiten. ¿Tienes indexados los campos id_encomun, nombre y apellidos?
  #11 (permalink)  
Antiguo 10/11/2013, 04:56
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Problema con SubConsulta MySQL

Así es jurena, están indexados los campos id_encomun, nombre y apellido entre otros.

Quiero que me imprima absolutamente todos los repetidos... repito, con la consulta anterior se imprimen, pero tarda en hacerlo alrededor de 3 minutos, eso es mucho tiempo y no se por que sucede!!!
  #12 (permalink)  
Antiguo 10/11/2013, 05:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Problema con SubConsulta MySQL

¿Y así cuánto tarda?
Código MySQL:
Ver original
  1. SELECT id, nombre, apellido
  2.     FROM mitabla m
  3.     INNER JOIN (SELECT apellido, nombre FROM mitabla WHERE id_encomun = 0
  4.     GROUP BY apellido, nombre HAVING COUNT(*) > 1)t1 ON m.apellido = t1.apellido AND m.nombre = t1.nombre ORDER BY m.apellido, m.nombre
  #13 (permalink)  
Antiguo 10/11/2013, 06:17
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Problema con SubConsulta MySQL

De esa forma no se puede ejecutar la consulta... me da el error: "Column 'apellido' in field list is ambiguous"
  #14 (permalink)  
Antiguo 10/11/2013, 06:21
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, 5 meses
Puntos: 2658
Respuesta: Problema con SubConsulta MySQL

Cita:
Iniciado por paulkees Ver Mensaje
Así es jurena, están indexados los campos id_encomun, nombre y apellido entre otros.

Quiero que me imprima absolutamente todos los repetidos... repito, con la consulta anterior se imprimen, pero tarda en hacerlo alrededor de 3 minutos, eso es mucho tiempo y no se por que sucede!!!
Recordemos que tanto GROUP BY como ORDER BY son consultas asesinas de performance, y se vuelve peor cuanto más registros hay, en especial si esos campos son VARCHAR.
Si pudiera evitarse esto sería más sencillo.

En cuanto al error de la última, es simple de resolver: debes indicar la tabla de donde toma el valor:
Código MySQL:
Ver original
  1. SELECT m.id, m.nombre, m.apellido
  2.     FROM mitabla m
  3.     INNER JOIN (SELECT apellido, nombre FROM mitabla WHERE id_encomun = 0
  4.     GROUP BY apellido, nombre HAVING COUNT(*) > 1)t1 ON m.apellido = t1.apellido AND m.nombre = t1.nombre ORDER BY m.apellido, m.nombre
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 10/11/2013, 07:03
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Problema con SubConsulta MySQL

Bueno, ahora si, aparentemente funciona bien...!!!

jurena y gnzsoloyo, no tengo palabras para agradecer, sobre todo por la paciencia, ya que a mi edad la ligereza de aprendizaje se va secando. Mi Sitio Web no tiene, en absoluto, fines de lucro y me siento contento como funciona, y en un 90 % gracias a las enseñanzas de ForosdelWeb y gente como ustedes.

Muchas gracias!!!
  #16 (permalink)  
Antiguo 10/11/2013, 11:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Problema con SubConsulta MySQL

nos alegramos, paulkees. Pido disculpas por no añadir los alias. Eso es indicio de no haberlo probado o tal vez de que por edad también se olvida uno de las cosas.
Con mi segunda consulta trataba de hacer lo que dice @gnzsoloyo, evitar el order by de todos, cuando solo me interesaba el order by de lo devuelto. Pero no nos has dicho cuánto tarda ahora en llevar a cabo la nueva consulta. Imagino que menos de 3 minutos, ¿no?
  #17 (permalink)  
Antiguo 11/11/2013, 05:27
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Problema con SubConsulta MySQL

Si jurena, tarda muchísimo menos... son 1442 registros y los imprime en 4 segundos, con una paginación (LIMIT) de 50 por página.

Nuevamente gracias jurena!!!

Etiquetas: select, sql, subconsulta
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:54.