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

Relación Tablas (un campo)

Estas en el tema de Relación Tablas (un campo) en el foro de Mysql en Foros del Web. Buenas. Necesito su ayuda urgente: Tengo dos tablas con la siguiente estructura: # Maquina # @@@@@@ # TipoDeMaquina # --------------- @@@@@@ ----------------------- idMaquina @@@@@@ idTipoDeMaquina ...
  #1 (permalink)  
Antiguo 08/11/2008, 20:25
 
Fecha de Ingreso: abril-2007
Mensajes: 42
Antigüedad: 17 años
Puntos: 0
Relación Tablas (un campo)

Buenas.
Necesito su ayuda urgente:

Tengo dos tablas con la siguiente estructura:


# Maquina # @@@@@@ # TipoDeMaquina #
--------------- @@@@@@ -----------------------
idMaquina @@@@@@ idTipoDeMaquina
--------------- @@@@@@ -----------------------
nombreMaquina @@@@@@ nombreTipoMaquina
----------------
observaciones
---------------
idTipoMaquina


Lo que necesito es, relacionar éstas 2 tablas de tal forma que, el campo de la tabla Maquina (idTipoMaquina) esté conectado con el campo de la tabla TipoDeMaquina (idTipoMaquina) para que, cuando mustre los resultados de una consulta hecha en Maquina, me aparezca la columna nombreTipoMaquina y no el ID de ese Tipo de Máquina. O sea:

En vez de ésto:

Nombre Maquina /// Observaciones /// Tipo de Maquina
Maquina032 @@ ------------------- @@ 4
Seccionadora06 @@ Por reparar. @@ 7


Salga esto:

Nombre Maquina /// Observaciones /// Tipo de Maquina
Maquina032 @@ --------------------- @@ Pintora
Seccionadora06 @@ Por reparar. @@ Fragmentadora


GRACIAS!
  #2 (permalink)  
Antiguo 10/11/2008, 07:25
 
Fecha de Ingreso: noviembre-2008
Mensajes: 11
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Relación Tablas (un campo)

Sencillo, debes seleccionar el campo que quieres mostrar, en este caso nombreTipoMaquina en vez del tipo, y unir las dos tablas por el id. He aquí la solución:

SELECT nombreMaquina,observaciones,nombreTipoMaquina
FROM Maquina,TipoDeMaquina
WHERE idTipoMaquina=idTipoDeMaquina;
  #3 (permalink)  
Antiguo 10/11/2008, 19:44
 
Fecha de Ingreso: abril-2007
Mensajes: 42
Antigüedad: 17 años
Puntos: 0
Respuesta: Relación Tablas (un campo)

TipoDeMaquina es una tabla, no un campo. He ahí la complicación...
  #4 (permalink)  
Antiguo 10/11/2008, 21:00
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, 4 meses
Puntos: 2658
Respuesta: Relación Tablas (un campo)

Lo que dices es que tienes dos tablas así:

Maquina (idMaquina, nombreTipoMaquina, observaciones, idTipoMaquina)
TipoDeMaquina (idTipoMaquina, nombreTipoMaquina)

Y quieres que la tabla devuelta por la consulta tenga por columnas:

nombreTipoMaquina, observaciones, nombreTipoMaquina

Bueno, el problema en realidad tal problema no existe.
Como te lo señaló snort_el_cerdete, la consulta debería quedar:

Código sql:
Ver original
  1. SELECT
  2.   nombreTipoMaquina 'Nombre Maquina',
  3.   observaciones 'Observaciones',
  4.   nombreTipoMaquina 'Tipo de Maquina'
  5. FROM Maquina  INNER JOIN TipoDeMaquina  USING(idTipoMaquina);

En este ejemplo (la diferencia de sintaxis no genera diferencias de resultado, sólo es un poco más eficiente en tiempo), cada tabla tiene su PK e idTipoMaquina en al mismo tiempo FK en Maquina, y al mismo tiempo se reemplazan los nombres de los campos por sus alias (el uso de la cláusula AS es innecesario desde el ANSI SQL:1999)..
¿Cuál es tu duda?
__________________
¿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 11/11/2008, 08:25
 
Fecha de Ingreso: abril-2007
Mensajes: 42
Antigüedad: 17 años
Puntos: 0
Busqueda Respuesta: Relación Tablas (un campo)

Tengo esas dos tablas relacionadas mediante el idTipoDeMaquina. Entonces, cuando hago la consulta, me arroja efectivamente el ID y no el nombreTipoDeMaquina que es lo que quiero. Al parece, tú lo lograste con la sentencia "...FROM Maquina INNER JOIN TipoDeMaquina USING(idTipoMaquina);"

Me pordrías explicar dicha cláusula? Gracias!
  #6 (permalink)  
Antiguo 11/11/2008, 09:18
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, 4 meses
Puntos: 2658
Respuesta: Relación Tablas (un campo)

INNER JOIN es lo que en álgebra relacional se define como junta natural (natural join) y que especifica que dos tablas se unan en una junta usando un campo como pivote. Esto devuelve únicamente los registros de ambas tablas donde el valor de ese campo sea el mismo, siempre usando ese campo para unir dichos registros.
Para que la cláusula funcione se debe indicar cuál es el campo que se desea usar de igualador. En el caso de MySQL existen dos formas: ON Tabla1.Campo1 = Tabla2.Campo1, o bien USING(Campo1)
El primer caso se usa especialmente cuando los campos cruzados tienen distinto nombre en cada tabla. El segundo caso se usa solamente si el campo en cuestión tiene el mismo nombre en ambas tablas.
Por cada campo usado de pivote, se debe indicar un ON x1 = x2 AND x3 = x4 ... etc. en un caso y simplemente listarlos si se usa USING(x1, x2, x3, ... etc).

La exigencia para que esto funcione eficientemente es que el valor en ese campo sea único al menos en una de las dos tablas. Si fuese repetitivo en las dos, la junta daría un resultado repetitivo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 11/11/2008, 20:56
 
Fecha de Ingreso: abril-2007
Mensajes: 42
Antigüedad: 17 años
Puntos: 0
Respuesta: Relación Tablas (un campo)

Entendí perfectamente el uso del INNER JOIN

Muchas pero muchas gracias!
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 00:10.