Query com 3 Tabelas

12/06/2020

0

Olá, esta é minha primeira publicação aqui, então, toda ajuda é bem vinda.

Tenho um banco de dados com 3 tabelas (Atendimento, Material e Taxa), criei uma query que busca informações das três tabelas, onde, existe atendimento que não gera Material e/ou Taxa, mas para gerar Material ou Taxa, é necessário ter um Atendimento. Essa query retornou apenas os dados que existem nas 3 tabelas, como faço para retornar os dados das 3 tabelas em apenas uma query independente de ter registro na tabela de Material e/ou Taxas?
Emerson

Emerson

Responder

Post mais votado

12/06/2020

sempre que tiver esse tipo de dúvida, publique a tua tentativa. isto facilita receber ajuda.

para o teu caso, utilize a tabela atendimento como tabela principal e relacione com as outras duas usando left join.
assim:
select
   *
from
   Atendimento A
left join
   Material M on M.campoquerelacionacomA = A.campousadopararelacionementocomM
left join
   Taxa T on T.campoquerelacionacomA = A.campousadopararelacionementocomT
[where
   ....
]

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

12/06/2020

Ricardo Arraes

Fala Emerson,

faltam detalhes sobre os relacionamentos e a cardinalidade.

Um atendimento pode ter mais de um material?
Um atendimento pode ter mais de uma taxa?
Um atendimento tem que ter um material E uma taxa? ou o atendimento pode não ter um deles?

Se possível, mande a query que você tentou executar para lhe ajudar melhor
Responder

12/06/2020

Ricardo Arraes

sempre que tiver esse tipo de dúvida, publique a tua tentativa. isto facilita receber ajuda.

para o teu caso, utilize a tabela atendimento como tabela principal e relacione com as outras duas usando left join.
assim:
select
   *
from
   Atendimento A
left join
   Material M on M.campoquerelacionacomA = A.campousadopararelacionementocomM
left join
   Taxa T on T.campoquerelacionacomA = A.campousadopararelacionementocomT
[where
   ....
]


exatamente, mas isso depende muito do relacionamento entre as tabelas e da cardinalidade pra definir qual será a tabela principal e quais serão relacionadas através dos joins...
veja que se um atendimento possuir varios materiais ou varias taxas um left join não ajudaria e já que podem existir atendimentos sem material/taxa, um right join das tabelas material e taxa com a tabela atendimento sendo a principal também não serviria...
portanto é necessário entender o modelo que está sendo implementado antes de formular a query
Responder

15/06/2020

Emerson Nascimento

Ricardo Arraes, olhe o que foi publicado pelo meu xará:
busca informações das três tabelas, onde, existe atendimento que não gera Material e/ou Taxa, mas para gerar Material ou Taxa, é necessário ter um Atendimento

com isso conclui-se que sempre haverá um atendimento, podendo ou não haver taxas e/ou materiais.
Responder

15/06/2020

Ricardo Arraes

Ricardo Arraes, olhe o que foi publicado pelo meu xará:
busca informações das três tabelas, onde, existe atendimento que não gera Material e/ou Taxa, mas para gerar Material ou Taxa, é necessário ter um Atendimento

com isso conclui-se que sempre haverá um atendimento, podendo ou não haver taxas e/ou materiais.


De fato, isso está bem entendido. No entanto não sabemos qual o numero máximo de materiais/taxas que um atendimento pode ter (nem se os materiais/taxas podem ser repetidos dentro do atendimento, mas isso é menos relevante). Essa é a questão e pode mudar totalmente a construção da query
Responder

15/06/2020

Anderson Gonçalves

Ricardo,

Você precisa pesquisar sobre o comando With que faz query dentro de query buscando resultados isolados para unir na sua busca.
Me procura que eu te ajudo:

Skype: anderson@case13.com.br

Ricardo Arraes, olhe o que foi publicado pelo meu xará:
busca informações das três tabelas, onde, existe atendimento que não gera Material e/ou Taxa, mas para gerar Material ou Taxa, é necessário ter um Atendimento

com isso conclui-se que sempre haverá um atendimento, podendo ou não haver taxas e/ou materiais.


De fato, isso está bem entendido. No entanto não sabemos qual o numero máximo de materiais/taxas que um atendimento pode ter (nem se os materiais/taxas podem ser repetidos dentro do atendimento, mas isso é menos relevante). Essa é a questão e pode mudar totalmente a construção da query
Responder

15/06/2020

Ricardo Arraes

Ricardo,

Você precisa pesquisar sobre o comando With que faz query dentro de query buscando resultados isolados para unir na sua busca.
Me procura que eu te ajudo:

Skype: anderson@case13.com.br

Ricardo Arraes, olhe o que foi publicado pelo meu xará:
busca informações das três tabelas, onde, existe atendimento que não gera Material e/ou Taxa, mas para gerar Material ou Taxa, é necessário ter um Atendimento

com isso conclui-se que sempre haverá um atendimento, podendo ou não haver taxas e/ou materiais.


De fato, isso está bem entendido. No entanto não sabemos qual o numero máximo de materiais/taxas que um atendimento pode ter (nem se os materiais/taxas podem ser repetidos dentro do atendimento, mas isso é menos relevante). Essa é a questão e pode mudar totalmente a construção da query


Fala Anderson, beleza?
a dúvida não é minha, estou apenas ajudando, no entanto, o WITH clause a que você se refere varia de banco de dados para banco de dados.
Por exemplo, o MySql Server não proporciona essa clausula WITH, além do que é possível resolver a query do Emerson de forma mais simples usando uma das clausulas JOIN, basta saber os detalhes que mencionei acima...
Responder

15/06/2020

Emerson

sempre que tiver esse tipo de dúvida, publique a tua tentativa. isto facilita receber ajuda.

para o teu caso, utilize a tabela atendimento como tabela principal e relacione com as outras duas usando left join.
assim:
select
   *
from
   Atendimento A
left join
   Material M on M.campoquerelacionacomA = A.campousadopararelacionementocomM
left join
   Taxa T on T.campoquerelacionacomA = A.campousadopararelacionementocomT
[where
   ....
]


Caros, agradeço a todos pelos direcionamentos/respostas, aproveitei dicas de todas as respostas e cheguei no objetivo que queria utilizando o Left Join, tive um pouco de dificuldade na base que estou trabalhando por causa de uma where enorme que eu tinha colocado na query mas, muitíssimo obrigado a todos.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar