0

Tengo una tabla stock la cual me trae (entre otras cosas) el id de otras tablas, lo que necesito es hacer una consulta que en vez de traer el ID de las demás tablas, traiga el nombre del elemento correspondiente a dicho Id. El diagrama de la BD es el siguiente introducir la descripción de la imagen aquí

y las consultas realizadas son las siguientes: introducir la descripción de la imagen aquí

Las flechas indican donde debería ir cada resultado, en el caso de id_element, este debe traer element, el cual a su vez tiene un id_elementBase, el cual posee el nombre que necesito mostrar. Traté utilizando inner join pero no logre hacerlo funcionar correctamente,y utilizando and el resultado es incorrecto. Gracias por su ayuda!!

sebastian
  • 23
  • 5

3 Answers3

1

Intenta con esto:

Lo que se esta haciendo es poner un alias a la columna de cada tabla, todo lo vamos a traer de stock donde el id coincida con el que se tiene en stock. \ Si quieres traer uno en especifico le indicas el where.

select b.name as baseName,p.name as providerName, e.elementModel as element, s.creation_date,s.id_provider,s.id_element,s.lot,s.expireDate,s.id_base,s.entryDate as departureDate,s.residue 
from stock as s
        inner join base as b on id_base = s.id_base
        inner join providerName as p on id_provider = p.id_provider
        inner join element as e on id_element = s.id_element 
        where s.id_stock = 1

De no se asi, y quieras traer todos solo lo omites.

select b.name as baseName,p.name as providerName, e.elementModel as element, s.creation_date,s.id_provider,s.id_element,s.lot,s.expireDate,s.id_base,s.entryDate as departureDate,s.residue 
    from stock as s
            inner join base as b on id_base = s.id_base
            inner join providerName as p on id_provider = p.id_provider
            inner join element as e on id_element = s.id_element 
cosito
  • 934
  • 2
  • 9
  • 28
1

Debes hacer un join de las diferentes tablas, para obtener los datos relacionados en las columnas.

La idea básica vamos a explorarla entre las tablas stock y provider, de donde vamos a obtener el nombre del proveedor para cada registro de stock, sería:

 select   st.id_stock
        , pr.name provider_name
        , st.lot
        , st.expire_date
        --etc...
   from stock st
        left join provider pr on pr.id_provider = st.id_provider

He utilizado un left join, dado que desconozco si el campo es not null, para que aparezcan todos los registros de stock independientemente de que exista una fila en la tabla de proveedores.

En la clausula on del join le indico al motor los campos por los que se relaciona una tabla con la otra.

También he utilizado un alias para la columna pr.name, de manera que quede claro cual es el dato que está allí.

Ampliando esta idea, puedes ir añadiendo las otras tablas, el from, con 4 de ellas se vería algo como:

   from stock st
        left join provider pr on pr.id_provider = st.id_provider
        left join base ba on ba.id_base = st.id_base
        left join element el 
                  left join elementModel emo on emo.id_elementModel = el.id_elementModel
               on el.id_element = st.id_element
jachguate
  • 25,659
  • 7
  • 35
  • 61
1

Usando Joins podrias:

Con el join haces la union entre las tablas, esta union la haces por medio de los id que tienen en comun o sea claves foraneas, cuando elegis el dato que queres mostrar le pones un sufijo que va a ser despues el alias que va a tener la tabla ejemplo si queres traer el nombre de producto pones p.name y cuando llamas a la tabla producto en el from le agregas el alias from producto p de esa forma le estas especificando que te traiga el campo name de la tabla producto (en caso de q tengas ese nombre de campo repetido en varias tablas)

    SELECT s.creation_date as date, p.name as productName, em.name as elementName, 
    s.lot, s.expireDate,
    b.name, s.entryDate as departureDate, s.residue
    from stock s inner join provider p on p.id_provider = s.id_provider
    inner join base b on b.id_base = s.id_base
    inner join element e on e.id_element = s.id_element
    inner join elementModel em on em.id_elementModel = e.id_elementModel
Juan
  • 1,664
  • 3
  • 23
  • 35