¿Cómo hacer una consulta en una tabla a través de llaves foráneas – MySQL?

publicado por: Anonymous

Tengo tres tablas: prestamo_usuarios, equipos y salas. En prestamos_usuarios tiene una relación con equipos y equipos con salas.

introducir la descripción de la imagen aquí

Lo que intento hacer es consultar datos de mi tabla préstamo_usuarios desde mi tabla salas. Quiero poder elegir una sala y que por medio de la relación que se tiene con la tabla equipos y éste con prestamo_usuarios me traiga datos donde el id de la sala esté en la columna id_sala en la tabla de equipo y que estos equipos que tienen en común el id de sala que están en la tabla de prestamos_usuarios.

Elijo la sala de mi tabla salas:

introducir la descripción de la imagen aquí

En mi tabla equipos, tengo dos registrados que tienen el id de la sala que seleccione:

introducir la descripción de la imagen aquí

Por último, en mi tabla prestamo_usuarios quiero que me traiga estos datos, que que tienen el id de los equipos que tienen el id de la sala que seleccione:

introducir la descripción de la imagen aquí

¿Alguna idea de cómo puedo resolver ésto?

solución

Eso lo solucionas haciendo JOINS entre las tablas:
(Para la proxima comparti el script de las tablas asi es mas rapido)

Con los JOINS entre tablas lo que haces es ir relacionandolas en base a los id que tienen en comun, de esa forma por ejemplo quiero obtener el id de la sala y el nombre de la misma mas la descripcion del equipo entonces en la consulta creo un prefijo sa(sala), e(equipo) y llamo a sa.id, sa.nombre y e.descripcion y en el momento que hago el from para decir de donde vienen los datos a cada tabla le agrego el prefijo correspondiente: from sala sa o from equipo e y luego ahi entran los joins donde digo por ejemplo que sa.id (el id de la sala de la tabla sala) es igual a e.id_sala (el id_sala que esta en la tabla equipo que es clave foranea) y ahi se van relacionando las tablas.

        Select sa.id, sa.nombre as nombreSala, e.descripcion as descripcionEquipo, 
        e.numero_serie as numeroSerieEquipo, 
        u.matricula_alumno as alumnoQueLoSolicito, 
        u.fecha_prestamo, u.fecha_devolucion, u.hora_inicio_uso,
        u.hora_fin_uso
        from salas sa inner join equipos e on sa.id = e.id_sala
        inner join prestamo_usuario u on e.id = u.id_equipo
        where sa.id = 1;

Para probar esa consulta arme un ejemplo con tus datos (Obviamente puse los tipos de datos asi nomas no puse los que iban correctamente solo me centre en el nombre de los campos y las claves primarias y foraneas)

        create database prueba;
        use prueba;

        Create table salas(
            id int not null auto_increment,
            nombre nvarchar(100) not null,
            capacidad int (10) not null,
            primary key(id)
        );


        Create table equipos(
            id int not null auto_increment,
            descripcion nvarchar (100) not null,
            numero_serie nvarchar(100) not null,
            num_inv int (10) not null,
            id_sala int (10) not null,
            primary key(id),
            FOREIGN KEY (id_sala) REFERENCES salas(id)
        );


        Create table prestamo_usuario(
            index_prestamo int not null auto_increment,
            matricula_alumno int (10) not null,
            id_equipo int (11) not null,
            fecha_prestamo datetime,
            fecha_devolucion datetime,
            hora_inicio_uso nvarchar(100) not null,
            hora_fin_uso nvarchar(100) not null,
            id_prestamo int (10) not null,
            primary key(index_prestamo),
            FOREIGN KEY (id_equipo ) REFERENCES equipos(id)
        )

introducir la descripción de la imagen aquí
introducir la descripción de la imagen aquí
introducir la descripción de la imagen aquí

Y luego sobre esas tablas con la consulta de los JOINS obtengo estos resultados sobre la tabla que arme:

introducir la descripción de la imagen aquí

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *