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

[SOLUCIONADO] Resolver clave foranea

Estas en el tema de Resolver clave foranea en el foro de Mysql en Foros del Web. Hola a todos, mi motor de búsqueda dentro de MySql es InnoDb, la cual permite claves foraneas para la integridad referencial. Tengo dos tablas, 1-Usuarios: ...
  #1 (permalink)  
Antiguo 22/06/2013, 05:56
 
Fecha de Ingreso: marzo-2013
Mensajes: 83
Antigüedad: 11 años, 1 mes
Puntos: 0
Resolver clave foranea

Hola a todos, mi motor de búsqueda dentro de MySql es InnoDb, la cual permite claves foraneas para la integridad referencial.

Tengo dos tablas,

1-Usuarios: Id_usuario, Nombre
2-Acciones: Id_accion, Responsable(foreign key, apunta a Id_usuario de la tabla Usuarios), Descripcion,Status

Bien, llegados a este punto, quiero hacer una consulta sql que me devuelva todos los campos de la tabla acciones donde Status sea "Realizado" lo que se haría de la siguiente forma:

SELECT * FROM Acciones WHERE Status='Realizado'

Esta sentencia me devolvería el campo responsable con un número (Id_usuario) pero... ¿qué sentencia debería escribir para que en vez de devolverme el Id_usuario me resolviera el nombre de ese id en concreto?

Hasta ahora lo que hago es que después de realizar la primera consulta, realizo una seguda sobre la tabla Usuarios preguntando su nombre con el resultado de Id_usuario obtenido en la primera, y creo que esto que estoy haciendo puede ser innecesario ya que este motor de búsqueda soporta integridad referencia con el uso de la Foreign Key.

Muchas gracias
  #2 (permalink)  
Antiguo 22/06/2013, 06: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, 5 meses
Puntos: 2658
Respuesta: Resolver clave foranea

Ve el tema de JOIN. Especialmente el INNER JOIN.
__________________
¿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 22/06/2013, 06:04
 
Fecha de Ingreso: marzo-2013
Mensajes: 83
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Resolver clave foranea

Se que con el INNER JOIN se podría pero al usar claves foraneas supongo que al hacer la consulta se podría vincular por si solo.

Veamos a ver si me explico mejor con lo que quiero, sería como poner algo así

SELECT Descripcion,Responsable(Nombre) FROM Acciones WHERE Status='Realizado'

así Responsable(Nombre) sería posible porque Responsable hace referencia a Usuarios (porque la pusimos como foreign key) por lo que no tendría que poner el INNER JOIN ya que la BBDD sabe hacia donde apunta.

Es por ser mas profesional a la hora de escribir las peticiones (y simplicidad visual).

Última edición por joselegolas; 22/06/2013 a las 07:05
  #4 (permalink)  
Antiguo 22/06/2013, 07:19
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, 5 meses
Puntos: 2658
Respuesta: Resolver clave foranea

Cita:
SELECT Descripcion,Responsable(Nombre) FROM Acciones WHERE Status='Realizado'
Eso no existe.

Cita:
Es por ser mas profesional a la hora de escribir las peticiones (y simplicidad visual).


Lo que estás planteando hacer no es profesional.
Mira, lo que quieres es tan simple y sencillo como hacer:
Código MySQL:
Ver original
  1. SELECT A.Descripcion, U.Nombre Responsable
  2. FROM Usuarios U INNER JOIN Acciones A ON U.usuario_id = A.Responsable
  3. WHERE Status='Realizado'
Es a es la forma correcta y profesional de hacerlo.
Y NO, si al DBMS no le indicas específicamente cómo relacionar dos tablas y qué campo quieres obtener, no puede adivinarlo, porque los nombres son arbitrarios (puestos por los creadores de las tablas), y una FK puede implicar N relaciones entre una tabla y otra; en esos casos el análisis semántico de las relaciones que quieres suponer implicarían algoritmos imposibles de optimizar para un DBMS.
Los DBMS no infieren relaciones, con la sola excepción de los JOINs implícitos (comas), que sólo operan si el campo relacional tiene el mismo nombre en ambas tablas, pero que mal usado puede causar enormes errores de resultados.
El uso de las FK, entre otras cosas, obliga al desarrollador a respetar la consistencia e integridad referencial, y no son para que el DBMS pueda resolver por si mismo ciertas consultas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 22/06/2013 a las 07:46
  #5 (permalink)  
Antiguo 22/06/2013, 12:24
 
Fecha de Ingreso: marzo-2013
Mensajes: 83
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Resolver clave foranea

Tendré que seguir apañandome con los JOIN, gracias
  #6 (permalink)  
Antiguo 22/06/2013, 12: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: 16 años, 5 meses
Puntos: 2658
Respuesta: Resolver clave foranea

Eso no es "apañarse", eso es trabajar profesionalmente...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: foreignkey
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 04:52.