none
Stored procedure com várias tabelas RRS feed

  • Pergunta

  • Olá, alguém pode dar uma ajudinha?

    Na StoredProcedure abaixo eu preciso que retorne:

    com o nome do bairro da tabela Programa_AARH;

    com o nome do bairro da tabela PF_Paciente;

    com o nome do bairro da tabela PF_Proprietário.

    Estas 3 tabelas contem a chave estrangeira cod_Endereco da tabela Endereco.

    A tabela Endereco contem a chave estrangeira da tabela Area_Bai_Local, onde estão os bairros. 

    No código eu consegui que retorne apenas com o nome do bairro da tabela Programa_AARH

    ALTER PROCEDURE [dbo].[spEncerramento]
    	@id AS INT
    AS
    BEGIN
    	SELECT E.nome as "Paciente",
    	       A.data_Contato,	
    	       E.data_Nasc  as "DataNascPaciente",
    	       D.descricao as "Ocupacao",
    	       H.descricao as "Bairro",
    	       F.descricao as "LocaldoAcidente",        	      
    	       B.nome as "Proprietario",        
    	       C.sigla as "Sexo",
    	       B.data_Nasc as "DataNascProp",	      
    	       I.nome,
    	       J.descricao,		 
    	       K.descricao as "Raca",
    	       L.descricao as "Mamifero",
    	       A.Encaminhamento 
    		   
    			 
    	FROM     Programa_AARH A,	  
    	         PF_Proprietario B,
    		 Adm_Sexo C, 
    		 Adm_Ocupacao D,
    		 PF_Paciente E,
    		 Area_Local_Acidente F,
    		 Endereco G,
    		 Area_Bai_Local H,
    		 Animal_Companhia I,
    		 Adm_Observa_Raiva J,
    		 Adm_Animal_Comp_Raca K,
    		 Adm_Mamiferos L	
    
       WHERE        
    	        A.cod_proprietario = B.id and		
    		A.cod_Ocupacao = D.id and
    		A.cod_Local_Meio = F.id  and
    		A.cod_Paciente = E.id and
    		B.cod_Sexo = C.id and
    		G.cod_Area_Loc = H.id and	
    		B.cod_Endereco = G.id and
    		A.cod_Animal_Companhia = I.id and	
    		A.cod_Observacao = J.id and
    		I.cod_Raca = K.id and
    		A.cod_Mamifero = L.id and
    	    A.id = @id
    	order by A.data_Contato asc; 
    END

     

    quinta-feira, 19 de novembro de 2015 20:49

Respostas

  • Boa noite,

    Wilson, experimente dessa forma:

    SELECT 
        E.nome as "Paciente",
        APAC.descricao as "BairroPaciente",
        A.data_Contato,	
        E.data_Nasc  as "DataNascPaciente",
        D.descricao as "Ocupacao",
        AAARH.descricao as "Bairro",
        F.descricao as "LocaldoAcidente",        	      
        B.nome as "Proprietario",        
        C.sigla as "Sexo",
        B.data_Nasc as "DataNascProp",	      
        APROP.descricao as "BairroProp",
        I.nome,
        J.descricao,		 
        K.descricao as "Raca",
        L.descricao as "Mamifero",
        A.Encaminhamento 
    FROM Programa_AARH A  
    INNER JOIN Adm_Ocupacao D
        ON D.id = A.cod_Ocupacao
    INNER JOIN Area_Local_Acidente F
        ON F.id = A.cod_Local_Meio
    INNER JOIN Animal_Companhia I
        ON I.id = A.cod_Animal_Companhia
    INNER JOIN Adm_Animal_Comp_Raca K
        ON K.id = I.cod_Raca
    INNER JOIN Adm_Observa_Raiva J
        ON J.id = A.cod_Observacao
    INNER JOIN Adm_Mamiferos L	
        ON L.id = A.cod_Mamifero
    INNER JOIN Endereco EAARH
        ON EAARH.id = A.cod_Endereco
    INNER JOIN Area_Bai_Local AAARH
        ON AAARH.id = EAARH.cod_Area_Loc
    
    INNER JOIN PF_Proprietario B
        ON B.id = A.cod_proprietario
    INNER JOIN Adm_Sexo C
        ON C.id = B.cod_Sexo
    INNER JOIN Endereco EPROP
        ON EPROP.id = B.cod_Endereco
    INNER JOIN Area_Bai_Local APROP
        ON APROP.id = EPROP.cod_Area_Loc
    
    INNER JOIN PF_Paciente E
        ON E.id = A.cod_Paciente
    INNER JOIN Endereco EPAC
        ON EPAC.id = E.cod_Endereco
    INNER JOIN Area_Bai_Local APAC
        ON APAC.id = EPAC.cod_Area_Loc
    
    WHERE        
        A.id = @id
    order by 
        A.data_Contato asc; 

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Wilson Boris sexta-feira, 20 de novembro de 2015 00:21
    quinta-feira, 19 de novembro de 2015 23:32

Todas as Respostas

  • Wilson esta tua query não tem inner join entre as tabelas. 

    Ex:

    Select * from Tb_A as A inner join Tbl_B as B on A.id = B.id  where A.nome

    Att, wsti.

    quinta-feira, 19 de novembro de 2015 21:05
  • Olá Wsti,

    obrigado pelo retorno!

    Interessante, eu não tenho usado o inner join, pois tenho utilizado o sinal de igualdade na cláusula where.

    No teu  ´where A.nome´ fala a operaçao de igualdade?

    Vou precisar estudar esta diferença.... 


    • Editado Wilson Boris quinta-feira, 19 de novembro de 2015 21:35 complemnto
    quinta-feira, 19 de novembro de 2015 21:27
  • Realmente wilson faltou o = . 

    Obrigado pela correção !

    Quando tu usas o '=' a interpretação é de Join, Verifique suas suas Tabelas e a ligação delas. E bem possível que vc tenha que utilizar left e right joins nessa tua consulta. 

    Segue um link que vai te ajudar nos seus estudos. 

    http://www.devmedia.com.br/inner-cross-left-rigth-e-full-joins/21016


    • Editado Wsti quinta-feira, 19 de novembro de 2015 22:16
    quinta-feira, 19 de novembro de 2015 22:04
  • Veja este artigo do gustavo, 

    https://gustavomaiaaguiar.wordpress.com/2010/09/06/mitos-do-sql-server-%E2%80%93-fazer-juncoes-via-inner-join-e-mais-rapido-que-na-clausula-where-parte-i/

    Att, wsti.

    quinta-feira, 19 de novembro de 2015 22:39
  • Boa noite,

    Wilson, experimente dessa forma:

    SELECT 
        E.nome as "Paciente",
        APAC.descricao as "BairroPaciente",
        A.data_Contato,	
        E.data_Nasc  as "DataNascPaciente",
        D.descricao as "Ocupacao",
        AAARH.descricao as "Bairro",
        F.descricao as "LocaldoAcidente",        	      
        B.nome as "Proprietario",        
        C.sigla as "Sexo",
        B.data_Nasc as "DataNascProp",	      
        APROP.descricao as "BairroProp",
        I.nome,
        J.descricao,		 
        K.descricao as "Raca",
        L.descricao as "Mamifero",
        A.Encaminhamento 
    FROM Programa_AARH A  
    INNER JOIN Adm_Ocupacao D
        ON D.id = A.cod_Ocupacao
    INNER JOIN Area_Local_Acidente F
        ON F.id = A.cod_Local_Meio
    INNER JOIN Animal_Companhia I
        ON I.id = A.cod_Animal_Companhia
    INNER JOIN Adm_Animal_Comp_Raca K
        ON K.id = I.cod_Raca
    INNER JOIN Adm_Observa_Raiva J
        ON J.id = A.cod_Observacao
    INNER JOIN Adm_Mamiferos L	
        ON L.id = A.cod_Mamifero
    INNER JOIN Endereco EAARH
        ON EAARH.id = A.cod_Endereco
    INNER JOIN Area_Bai_Local AAARH
        ON AAARH.id = EAARH.cod_Area_Loc
    
    INNER JOIN PF_Proprietario B
        ON B.id = A.cod_proprietario
    INNER JOIN Adm_Sexo C
        ON C.id = B.cod_Sexo
    INNER JOIN Endereco EPROP
        ON EPROP.id = B.cod_Endereco
    INNER JOIN Area_Bai_Local APROP
        ON APROP.id = EPROP.cod_Area_Loc
    
    INNER JOIN PF_Paciente E
        ON E.id = A.cod_Paciente
    INNER JOIN Endereco EPAC
        ON EPAC.id = E.cod_Endereco
    INNER JOIN Area_Bai_Local APAC
        ON APAC.id = EPAC.cod_Area_Loc
    
    WHERE        
        A.id = @id
    order by 
        A.data_Contato asc; 

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Wilson Boris sexta-feira, 20 de novembro de 2015 00:21
    quinta-feira, 19 de novembro de 2015 23:32
  • Valeu GIGANTE gapimex!

    Perfeitíssimo, 100%.

    Que código cara, muito 10.

    MUITO OBRIGADO E UMA EXCELENTE NOITE.

    sexta-feira, 20 de novembro de 2015 00:21
  • Muito obrigado pela referência Wsti.

    Apesar de ter recebido um presentão do  gapimex abaixo, eu vou estudar.

    sexta-feira, 20 de novembro de 2015 00:23