ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

[resolvido] SQL 3 tabelas

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Qui Ago 17, 2017 9:28 am    Assunto: [resolvido] SQL 3 tabelas Responder com Citação

Estou tentando montar essa SQL, mas achei alguns probleminhas...

Na tabela contas tenho esses campos

Código:
SELECT C.CODIGO, C.COD_AGENDAMENTO, C.COD_CONVENIO, C.STATUS, C.TOTAL


Aí preciso trazer para a tela o NOME DO CONVENIO cujo campo correspondente é CODIGO na tabela CONVENIOS .

Em seguida trazer o NOME DO PACIENTE da tabela PACIENTES. O campo COD_PACIENTE, está na tabela AGENDA, que se liga com essa tabela pelo COD_AGENDAMENTO.

Preciso tbm da DATA, que tbm esta na AGENDA. O campo de ligação entre as tabelas é COD_AGENDAMENTO

É possivel fazer isso ou eu deveria já gravar DATA e COD_PACIENTE tbm nessa tabela?


Editado pela última vez por renanbg em Qui Ago 17, 2017 11:07 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
dinocesar
Novato
Novato


Registrado: Segunda-Feira, 15 de Mai de 2017
Mensagens: 26

MensagemEnviada: Qui Ago 17, 2017 9:32 am    Assunto: Responder com Citação

Por favor, poste a estrutura completa das tabelas, para que fique mais facil o entendimento. Pode ser um print do DER (caso tenha).
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qui Ago 17, 2017 9:38 am    Assunto: Responder com Citação

É possível sim, supondo que temos as tabelas A, B, C e D

onde A possui os campos B_ID e C_ID

e C possui o campo D_ID

Código:
SELECT A.Nome,
       B.Nome,
       C.Nome,
       D.Nome
FROM A
     INNER JOIN B
     ON A.B_ID = B.ID
     INNER JOIN C
     ON A.C_ID = C.ID
     INNER JOIN D
     ON C.D_ID = D.ID
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mentow
Novato
Novato


Registrado: Quarta-Feira, 15 de Fevereiro de 2017
Mensagens: 25
Localização: Macapá - AP

MensagemEnviada: Qui Ago 17, 2017 9:43 am    Assunto: Re: SQL 3 tabelas Responder com Citação

renanbg escreveu:
Estou tentando montar essa SQL, mas achei alguns probleminhas...

Na tabela contas tenho esses campos

Código:
SELECT C.CODIGO, C.COD_AGENDAMENTO, C.COD_CONVENIO, C.STATUS, C.TOTAL


Aí preciso trazer para a tela o NOME DO CONVENIO cujo campo correspondente é CODIGO na tabela CONVENIOS .

Em seguida trazer o NOME DO PACIENTE da tabela PACIENTES. O campo COD_PACIENTE, está na tabela AGENDA, que se liga com essa tabela pelo COD_AGENDAMENTO.

Preciso tbm da DATA, que tbm esta na AGENDA. O campo de ligação entre as tabelas é COD_AGENDAMENTO

É possivel fazer isso ou eu deveria já gravar DATA e COD_PACIENTE tbm nessa tabela?



Código:

SELECT A.CODIGO,
       B.COD_PACIENTE,
       C.DATA
  FROM AGENDAMENTO A 
  LEFT JOIN TABELA_CONVENIOS B
    ON B.CODIGO = A.ID_CONVENIO
  LEFT JOIN TABELA_PACIENTES C
    ON C.COD_PACIENTE = A.ID_PACIENTE_CONVENIO


Vai ficar mais ou menos assim, não testei, espero ter ajudado...
_________________
if (Post.State = psResolvido) then
begin
Post.Caption := Post.Caption + ' [RESOLVIDO]';
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Ago 17, 2017 10:05 am    Assunto: Responder com Citação

Bom dia,

renanbg, pelo que entendi a query ficaria da seguinte forma:

Código:
select
    ct.Codigo,
    ct.Cod_Agendamento,
    ct.Cod_Convenio,
    cv.Nome as Nome_Convenio,
    ct.Status,
    ct.Total,
    pa.Nome as Nome_Paciente,
    ag.Data as Data_Agendamento
from Contas as ct
inner join Convenios as cv
    on cv.Codigo = ct.Cod_Convenio
inner join Agenda as ag
    on ag.Cod_Agendamento = ct.Cod_Agendamento
inner join Pacientes as pa
    on pa.Cod_Paciente = ag.Cod_Paciente


Espero que ajude

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos-residencial-casa
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Qui Ago 17, 2017 10:05 am    Assunto: Responder com Citação

Opa, vamos lá.

Seria algo assim:


Código:
SELECT C.CODIGO, C.STATUS, C.TOTAL,
       A.DATA, A.HORA,
       P.NOME,
       D.CONVENIO
  FROM CONTAS C
  LEFT JOIN AGENDA A
    ON A.CODIGO = C.COD_AGENDAMENTO
  LEFT JOIN PACIENTES P
    ON P.CODIGO = A.COD_PACIENTE
  LEFT JOIN CONVENIOS D
    ON D.CODIGO = C.COD_CONVENIO
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Qui Ago 17, 2017 10:09 am    Assunto: Responder com Citação

imex escreveu:
Bom dia,

renanbg, pelo que entendi a query ficaria da seguinte forma:

Código:
select
    ct.Codigo,
    ct.Cod_Agendamento,
    ct.Cod_Convenio,
    cv.Nome as Nome_Convenio,
    ct.Status,
    ct.Total,
    pa.Nome as Nome_Paciente,
    ag.Data as Data_Agendamento
from Contas as ct
inner join Convenios as cv
    on cv.Codigo = ct.Cod_Convenio
inner join Agenda as ag
    on ag.Cod_Agendamento = ct.Cod_Agendamento
inner join Pacientes as pa
    on pa.Cod_Paciente = ag.Cod_Paciente


Espero que ajude

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos-residencial-casa


bom dia imex, postei logo depois de você.
A sua estrutura esta correta, apenas ajustei os nomes de acordo com minhas tabelas, ficando assim:

Código:
select
    ct.Codigo,
    ct.Cod_Agendamento,
    ct.Cod_Convenio,
    cv.convenio as Nome_Convenio,
    ct.Status,
    ct.Total,
    pa.Nome as Nome_Paciente,
    ag.Data as Data_Agendamento
from Contas as ct
inner join Convenios as cv
    on cv.Codigo = ct.Cod_Convenio
inner join Agenda as ag
    on ag.Codigo = ct.Cod_Agendamento
inner join Pacientes as pa
    on pa.Codigo = ag.Cod_Paciente


Agora minha duvida é a seguinte:

Na tabela contas, tenho uma chave estrangeira ligada na tabela agenda.
Colocar essa SQL fixa lá não me atrapalharia em nada, caso eu delete algo da agenda?
Te pergunto porque usei o evento os cascate e no momento fiz a ligação mestre/detalhe entre as 2 tabelas.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
dinocesar
Novato
Novato


Registrado: Segunda-Feira, 15 de Mai de 2017
Mensagens: 26

MensagemEnviada: Qui Ago 17, 2017 10:14 am    Assunto: Responder com Citação

Te mandei uma mp renan, dá uma olhada!
_________________
Delphi + Oracle + MSSQL + MySQL + Forms & Report + Qlikview
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Qui Ago 17, 2017 10:17 am    Assunto: Responder com Citação

Blz, obrigado pela força amigo.
Acredito que a estrutura esteja correta. Agora só preciso adaptar um where.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qui Ago 17, 2017 10:27 am    Assunto: Responder com Citação

Citação:
Na tabela contas, tenho uma chave estrangeira ligada na tabela agenda.
Colocar essa SQL fixa lá não me atrapalharia em nada, caso eu delete algo da agenda?
Te pergunto porque usei o evento os cascate e no momento fiz a ligação mestre/detalhe entre as 2 tabelas.


Nesse caso, se for a tabela Agenda quem referencia a tabela de Contas, então o registro da tabela Contas também será apagado, senão, o registro continuará lá
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Qui Ago 17, 2017 11:03 am    Assunto: Responder com Citação

Sim, tenho a tabela PRODUCAO E CONTAS que são detalhe da AGENDA, via COD_AGENDAMENTO.

Testei aqui e as exclusões estão funcionando bem.

Obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB