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

[Mysql] Inner Join a si mismo

Estas en el tema de [Mysql] Inner Join a si mismo en el foro de Mysql en Foros del Web. Les dejo el siguiente ejemplo con el que vengo trabajando un problema: LA TABLA Código PHP: +------+---------+--------+---------+ |  id    |  nombre   |  codigo  |  tamanio  ...
  #1 (permalink)  
Antiguo 24/03/2012, 11:30
 
Fecha de Ingreso: marzo-2012
Mensajes: 9
Antigüedad: 14 años, 7 meses
Puntos: 0
Pregunta [Mysql] Inner Join a si mismo

Les dejo el siguiente ejemplo con el que vengo trabajando un problema:

LA TABLA
Código PHP:
+------+---------+--------+---------+

| 
id   | nombre  | codigo | tamanio |

+------+---------+--------+---------+

|    
1 | Pelota3 |    100 |     420 |

|    
2 | Carpa1  |    200 |     445 |

|    
3 | Pelota2 |    100 |     440 |

|    
4 | Carpa2  |    200 |     340 |
|    
5 | Carpa3  |    100 |     350 |

|    
6 | Pelota4 |    100 |     380 |

+------+---------+--------+---------+ 
LA CONSULTA

Código PHP:
SELECT T1.* FROM tabla T1
 INNER JOIN
 
(SELECT codigo, MIN(ABS(tamanio-400)) diferencia

 FROM tabla GROUP BY codigo
) T2 ON T1.codigo = T2.codigo AND  ABS(T1.tamanio - 400) = T2.diferencia
ORDER BY codigo
; 
Con lo anterior obtengo el codigo de producto cuya diferencia entre el tamanio y el valor 400 (un parametro) es la menor, sin repetidos.

Bien ahora lo que nesecito es obtener Le codigo y la diferencia y el Id de los productos cuya resta de tamaños sea la menor

Lo que intente fue:

Código PHP:
SELECT T1.*, ABS(T1.tamanio - T2.Tamanio) as Diferencia
 FROM tabla T1
 INNER JOIN T2 ON T1
.codigo = T2.codigo AND ABS(T1.tamanio - T2.Tamanio)<100
Group by T1
.codigo
ORDER BY diferencia asc
; 
Pero lo que obtengo no es fiel, el id de producto que tengo es le menor con el el codigo correspondiente, en ves del acorde a la menor diferencia.
Como podria solucionarlo?

Gracias

Última edición por nosoul; 24/03/2012 a las 11:36

Etiquetas: calculada, columna, group, innerjoin
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 21:45.