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

[SOLUCIONADO] dos columnas con referencia a la misma columna de otra tabla. Error al generar sql

Estas en el tema de dos columnas con referencia a la misma columna de otra tabla. Error al generar sql en el foro de Mysql en Foros del Web. Hola! Despues de tanto leerlos, debo hacerles una consulta, que no pude resolver, lei mucho y creo que quizas es un error al plantear la ...
  #1 (permalink)  
Antiguo 21/04/2013, 17:27
 
Fecha de Ingreso: enero-2008
Mensajes: 2
Antigüedad: 16 años, 10 meses
Puntos: 0
dos columnas con referencia a la misma columna de otra tabla. Error al generar sql

Hola!

Despues de tanto leerlos, debo hacerles una consulta, que no pude resolver, lei mucho y creo que quizas es un error al plantear la db desde un principio.

Tengo dos columnas de una tabla, que hacen referencia a una sola columna de otra tabla.

El problema surge cuando quiero traer los valores referenciando mediante join a las mismas.

Código:
Tabla reparaciones
- ID
- falla_representante_ID_falla
- falla_tecnico_ID_falla
- .... (10 registros mas a unir con otros ID de otras tablas y traer la descripcion)

Tabla falla
-ID
-descripcion
Hasta ahi creo que es correcto

Puedo traer una por separado, pero no a la vez.


Código:
SELECT reparaciones.id, falla.descripcion as falla_representante
FROM reparaciones
INNER JOIN falla on reparaciones.falla_representante_ID_falla = falla.ID
Intente con union, funciona, pero me las trae en la mismo columna y no en separadas

Código:
SELECT reparaciones.ID, falla.descripcion as falla_representante
from reparaciones
INNER JOIN falla on reparaciones.falla_representante_ID_falla = falla.ID
UNION
SELECT reparaciones.ID, falla.descripcion as falla_tecnico
from reparaciones
INNER JOIN falla on reparaciones.falla_tecnico_ID_falla = falla.ID

Tambien intente traer todo junto, pero hace cualquier cosa
Código:
SELECT r1.ID, f2.descripcion as falla_representante, f2.descripcion as falla_tecnico
from reparaciones r1
INNER JOIN falla as f2 on r1.falla_representante_ID_falla = 
f2.ID
INNER JOIN reparaciones r2 on r2.falla_tecnico_ID_falla = 
f2.ID
Espero ser claro y me puedan ayudar, o quizas es un error desde el comienzo.

Saludos
  #2 (permalink)  
Antiguo 21/04/2013, 17:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: dos columnas con referencia a la misma columna de otra tabla. Error al gen

Es un caso de manual: Tienes una tabla A con dos FK, ambas referenciando a la misma tabla B, pero a diferentes registros.
Lo que se hace es que el DBM lea dos veces la misma tabla, una vez para la primera FK y la otra para la segunda. Pero como la tabla B es siempre la misma hay que hacer que el DBMS las tome como dos invocaciones separadas, y para eso se inventaron, por ejemplo, los alias:
Código MySQL:
Ver original
  1. SELECT reparaciones.id, F1.descripcion falla_representante, F2.descripcion falla_tecnicor
  2. FROM reparaciones R
  3.     INNER JOIN falla F1 on R.falla_representante_ID_falla = F1.ID
  4.     INNER JOIN falla F2 on R.falla_representante_ID_falla = F2.ID
__________________
¿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 21/04/2013, 17:42
 
Fecha de Ingreso: enero-2008
Mensajes: 2
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: dos columnas con referencia a la misma columna de otra tabla. Error al gen

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Es un caso de manual: Tienes una tabla A con dos FK, ambas referenciando a la misma tabla B, pero a diferentes registros.
Lo que se hace es que el DBM lea dos veces la misma tabla, una vez para la primera FK y la otra para la segunda. Pero como la tabla B es siempre la misma hay que hacer que el DBMS las tome como dos invocaciones separadas, y para eso se inventaron, por ejemplo, los alias:
Código MySQL:
Ver original
  1. SELECT reparaciones.id, F1.descripcion falla_representante, F2.descripcion falla_tecnicor
  2. FROM reparaciones R
  3.     INNER JOIN falla F1 on R.falla_representante_ID_falla = F1.ID
  4.     INNER JOIN falla F2 on R.falla_tecnico_ID_falla = F2.ID
En el segundo join hay que cambiar la columna, pero se sobreentiende

Es exactamente lo que quise hacer en el ultimo intento que puse.
Pero no le cambiaba el alias a las columnas del select, solo dentro de los joins, pero lo mio fue un intento desesperado, y el tuyo de alguien que sabe :)


Y estaba seguro que era algo bien basico, pero no encontraba como buscarlo o ejemplos.

Gracias por la iluminacion.

Última edición por chesus05; 21/04/2013 a las 17:50
  #4 (permalink)  
Antiguo 21/04/2013, 17: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: 17 años
Puntos: 2658
Respuesta: dos columnas con referencia a la misma columna de otra tabla. Error al gen

me alegro que te sirviera.
Es el tipo de casos que suele generar confusión al principio, porque suele pensarse que los alias son sólo para simplificar escritura, o cambiar los nombres de las columnas, y no es así. Hay momentos en que tienen usos críticos.

__________________
¿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 04/01/2014, 07:17
Avatar de fullmedios2  
Fecha de Ingreso: enero-2014
Ubicación: Paso de los Libres - Corrientes
Mensajes: 1
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: dos columnas con referencia a la misma columna de otra tabla. Error al gen

Me costó barbaridad entender el ejemplo, sobre todo porque no sabía que se puede prescindir del operador AS... pero me vino de lujo.
Gracias por el aporte @gnzsoloyo
  #6 (permalink)  
Antiguo 27/05/2014, 07:48
 
Fecha de Ingreso: mayo-2014
Ubicación: Riobamba
Mensajes: 2
Antigüedad: 10 años, 5 meses
Puntos: 0
De acuerdo Respuesta: dos columnas con referencia a la misma columna de otra tabla. Error al gen

Cita:
Iniciado por gnzsoloyo Ver Mensaje
me alegro que te sirviera.
Es el tipo de casos que suele generar confusión al principio, porque suele pensarse que los alias son sólo para simplificar escritura, o cambiar los nombres de las columnas, y no es así. Hay momentos en que tienen usos críticos.

De veras me sirvio de gran ayuda muchas gracias, hasta ahora vivi engañado m=pensando que el alias te servivia colo para simplificar escritura lol..

Salu2 pana

Etiquetas: columna, columnas, join, referencia, registros, 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 13:59.