none
Query para consultar 3 tabelas relacionadas RRS feed

  • Pergunta

  • Possuo 3 tabelas:

    INJETORAS

    id

    descricao

    INJETORA_MOLDES

    id

    id_molde

    id_injetora

    MOLDE_MATERIAL

    id

    id_molde

    id_material

    Baseado nestas tabelas, meu usuário ira selecionar o id_injetora e eu quero que ele informe os materias que são produzidas com este molde.

    Alguma idéia?

    terça-feira, 7 de julho de 2015 19:12

Respostas

Todas as Respostas

  • Deleted
    • Marcado como Resposta Marcos SJ quinta-feira, 9 de julho de 2015 19:20
    terça-feira, 7 de julho de 2015 19:25
  • Jonatas, parece que são cinco tabelas: além das três que mencionou, não existem as tabelas MOLDES e MATERIAIS?

    -- código 1 v3
    SELECT I.id, I.descricao, IM.id_molde, MM.id_material
      from MOLDE_MATERIAL as MM
           inner join INJETORA_MOLDES as IM on IM.id_molde = MM.id_molde
           inner join INJETORAS as I on I.id = IM.id_injetora
      where I.id = ...





    Olá José,

    Sim, existem estas outras tabelas(MATERIAIS e MOLDES), que eu esqueci de mencionar e que fazem toda a diferença na minha pergunta. :-(

    A sua query já me ajudou muito, MAS... rs

    Eu queria exibir a descrição do material ao invés do id do material, esta descrição está justamente na tabela MATERIAIS, que não citei.

    Isso é possível? Pq já está dando um nó na minha mente ... e aproveitando, outra dúvida: O correto é organizar as tabelas assim como fiz?

    quarta-feira, 8 de julho de 2015 17:21
  • -- código 1 v3
    SELECT I.id, I.descricao, IM.id_molde, M.descricao_material
      from MOLDE_MATERIAL as MM
           inner join INJETORA_MOLDES as IM on IM.id_molde = MM.id_molde
           inner join INJETORAS as I on I.id = IM.id_injetora
           inner join MATERIAIS as M on M.id_material = MM.id_material
      where I.id = ...


    Leonardo D'Amato

    quarta-feira, 8 de julho de 2015 17:25
  • José,

    adaptei sua query da seguinte forma e funcionou perfeitamente como eu queria:

    SELECT I.id, I.descricao, IM.id_molde, MM.id_material, MT.descricao
      from MOLDE_MATERIAL as MM
           inner join INJETORA_MOLDES as IM on IM.id_molde = MM.id_molde
           inner join INJETORAS as I on I.id = IM.id_injetora
           inner join MATERIAIS as MT on MM.id_material = MT.id
    where I.id = 2

    Cada material só pode ser produzido por 1 molde, cada molde pode ser utilizado em N injetoras, na minha tela o usuário irá selecionar a injetora e logo após fazer uma pesquisa o sistema irá exibir os materiais que podem ser produzidos naquela injetora, baseado no molde que pode ser usado na mesma, pra tornar mais fácil, já que o usuário está mais habituado com os materiais e não com moldes. Ficou top!

    quarta-feira, 8 de julho de 2015 17:35
  • Mas aí surgiu outra dúvida José,

    Na msm tela tenho uma query que busca as injetoras que não estão trabalhando:

    select * from injetoras where id not in (select id_injetora from PRODUCAO where status = 'A')

    Até aí perfeito, mas agora me deparei que tbm não posso exibir as injetoras que estão em manutenção, ou seja que estão com STATUS = 'A' na tabela PARADAS.

    Como resolvo isso?


    quarta-feira, 8 de julho de 2015 17:40
  • Jonatas, no caso, você tá falando de uma query distinta da query acima, ou quer excluir as injetoras em manutenção da primeira query?

    Leonardo D'Amato

    quarta-feira, 8 de julho de 2015 17:47
  • Jonatas, no caso, você tá falando de uma query distinta da query acima, ou quer excluir as injetoras em manutenção da primeira query?


    Blz Leonardo?

    Sim, é uma outra query que não tem relação com a citada acima, citei neste tópico porque está na mesma tela do meu sistema.

    quarta-feira, 8 de julho de 2015 18:07
  • Legal, 

    Entao a situação é a seguinte:

    Vc tem 3 tabelas (Injetoras, Producao e Paradas). A tabela Producao e Paradas em o campo Status, e precisa retornar as injetoras que nao possuem status 'A' nas tabelas?

    Caso seja isso, pode tentar da seguinte forma (adapte suas tabelas na query)

    SELECT * FROM #Injetoras 
    JOIN #Producao on #Injetoras.ID = #Producao.IDINJETORA and #Producao.STAT <> 'A'
    UNION
    SELECT * FROM #Injetoras 
    JOIN #Paradas on #Injetoras.ID = #Paradas.IDINJETORA and #Paradas.STAT <> 'A'

    Dê mais detalhes que pra gente conseguir te ajudar melhor :)


    Leonardo D'Amato


    quarta-feira, 8 de julho de 2015 18:12