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

Consulta Mysql devuelve registros repetidos

Estas en el tema de Consulta Mysql devuelve registros repetidos en el foro de Mysql en Foros del Web. Estimados amigos , Tengo esta consulta mysql , en la cual necesito listar todos los afiliados de una mutual con sus dni, nro. control interno, ...
  #1 (permalink)  
Antiguo 18/10/2012, 00:34
 
Fecha de Ingreso: mayo-2003
Mensajes: 3
Antigüedad: 20 años, 11 meses
Puntos: 0
Pregunta Consulta Mysql devuelve registros repetidos

Estimados amigos ,
Tengo esta consulta mysql , en la cual necesito listar todos los afiliados de una mutual con sus dni, nro. control interno, y a que reparticion o departamento pertenece cada uno.
Código MySQL:
Ver original
  1.     afiliados.id,
  2.     afiliados.dni,
  3.     afiliados.apellido,
  4.     afiliados.nombre,
  5.     afiliados.reparticiones_id,
  6.     afiliadoscontrol.codigo,
  7.     afiliadoscontrol.id as acid,
  8.     reparticiones.nombre as reparticion
  9.     afiliados
  10. INNER JOIN afiliadoscontrol ON afiliados.id = afiliadoscontrol.afiliados_id
  11. INNER JOIN reparticiones ON afiliados.reparticiones_id = reparticiones.id
  12. WHERE (afiliadoscontrol.principal = 1) AND
  13.     (  reparticiones_id = '13' ) OR  
  14.     (  reparticiones_id = '12' ) OR  
  15.     (  reparticiones_id = '2' ) OR  
  16.     (  reparticiones_id = '9' ) OR  
  17.     (  reparticiones_id = '8' ) OR  
  18.     (  reparticiones_id = '3' ) OR  
  19.     (  reparticiones_id = '5' ) OR  
  20.     (  reparticiones_id = '6' ) OR  
  21.     (  reparticiones_id = '7' ) OR  
  22.     (  reparticiones_id = '11' ) OR  
  23.     (  reparticiones_id = '1' ) OR  
  24.     (  reparticiones_id = '4' ) OR  
  25.     (  reparticiones_id = '10' )
Pero me esta devolviendo registros repetidos , obviamente en la tablas no se encuentran repetidos.
Que puede estar pasando , desde ya muchas gracias.
  #2 (permalink)  
Antiguo 18/10/2012, 08:14
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta Mysql devuelve registros repetidos

Hola adolphm:

Debes tener mucho cuidado cuando utilizas en una misma sentencia el operador AND y el operador OR, ya que estos tienen una jerarquía distinta, por lo que debes hacer un uso correcto de los paréntesis.

En matemáticas si tu haces esto:

Código:
2 + 3 * 5 = 17
ya que el operador de multiplicación TIENE MAYOR JERARQUÍA que el operador de suma, por lo tanto no importa que la suma aparezca más a la izquierda de la operación, PRIMERO SE EJECUTA LA MULTIPLICACIÓN y en enseguida se hace la suma.

Por otro lado, si tu haces esto:

Código:
(2 + 3) * 5 = 25
Esto es porque al colocar paréntesis indicas que se tiene que realizar primeramente la suma y después la resta.

En tu caso puede estar pasando algo parecido, ya que el operador AND tiene más jerarquía que el operador OR y todos los paréntesis que pones en realidad no sirven absolutamente para nada... Además, no entiendo por qué no utilizas una condición IN en lugar de poner tantos OR's... prueba así:

Código:
...
WHERE 
afiliadoscontrol.principal = 1  AND 
reparticiones_id IN ('13', '12', '2','9','8','3','5','6','7','11','1','4','10')
o en su defecto, si quisieras continuar utilizando todos los OR's deberías ponerlos así:

Código:
....
WHERE
afiliadoscontrol.principal = 1  AND 
(
reparticiones_id = '13' OR  
reparticiones_id = '12' OR  
....
reparticiones_id = '10'
) 
Es decir, quitar todos los paréntesis inútiles y dejar sólo un par, que agrupe todas las condiciones OR.

Haz la prueba y nos comentas. si continuas con problemas, deberás revisar que estés colocando todas las relaciones en cada ON, pues es posible que se esté realizando un producto cartesiano entre tus tablas.

Saludos
Leo
  #3 (permalink)  
Antiguo 18/10/2012, 18:26
 
Fecha de Ingreso: mayo-2003
Mensajes: 3
Antigüedad: 20 años, 11 meses
Puntos: 0
De acuerdo Respuesta: Consulta Mysql devuelve registros repetidos

leonardo_josue, gracias por responder..

La verdad se me habia pasado el tema de la jerarquia de los operadores, eso es por hacerlo medio de memoria, voy a revisar el codigo poniendo atencion a la jerarquia de los operadores.

Con respecto al operador IN, no lo tenia presente...

Voy a probar los cambios y despues lo comento. Gracias de Nuevo.

Etiquetas: devuelve, join, registros, repetidos, select, sql, tabla
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 12:09.