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: 12 años, 1 mes
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 |

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

|    
Pelota3 |    100 |     420 |

|    
Carpa1  |    200 |     445 |

|    
Pelota2 |    100 |     440 |

|    
Carpa2  |    200 |     340 |
|    
Carpa3  |    100 |     350 |

|    
Pelota4 |    100 |     380 |

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

Código PHP:
SELECT T1.* FROM tabla T1
 INNER JOIN
 
(SELECT codigoMIN(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 14:28.