Fórum Simplificar consulta SQL #422678
28/08/2012
0
Link dos bancos:
http://www.rochanet.com.br/easyimobiliaria/
Código SQL utilizado:
SELECT bpm_contratos.IDCONTRATO, bpm_contratos.DATA_CONTRATO, bpm_contratos.IDIMOVEL, bpm_contratos.IDLOCADOR, bpm_contratos.IDLOCATORIO, bpm_contratos.IDFIADOR, bpm_contratos.DATAINICIO_CONTRATO, bpm_contratos.DATATERMINO_CONTRATO, bpm_contratos.VALORCONTRATO, bpm_contratos.VALOR_EXTENSO_CONTRATO, bpm_contratos.DIAVENCI_CONTRATO, bpm_contratos.DIAVENCI_EXTENSO_CONTRATO, bpm_contratos.ALUGUEL_CONTRATO, bpm_contratos.ALUGUEL_EXTENSO_CONTRATO, bpm_contratos.QTD_PARCELAS, bpm_contratos.QTD_PARCELAS_EXTENSO, bpm_contratos.IDFORMA_PGTO, bpm_contratos.RTF_CONTRATO, bpm_contratos.CORPO_CONTRATO, bpm_contratos.STATUS, bpm_imovel.NomeImovel, bpm_imovel.DescicaoImovel, bpm_imovel.EnderecoImovel, bpm_imovel.NumeroImovel, IMV_cidade.Nome AS CidadeImovel, bpm_imovel.BairroImovel, bpm_imovel.Abrev AS UFImovel, bpm_imovel.CEPImovel, Locador.cnpjcpf AS CPFCNPJLocador, Locador.nome AS NomeLocador, Locador.NACIONALIDADELocador AS NACIONALIDADElOCADOR, LCD_Endereco.Logadouro AS LogadouroLocador, LCD_Endereco.Numero AS NumeroLocador, LCD_Endereco.Complemento AS ComplementoLocador, LCD_Endereco.Bairro AS BairroLocador, LCD_Endereco.CEP AS CEPLocador, LCD_Endereco.CxPostal AS CxPostalLocador, LCD_Endereco.Abrev AS UFLocador, LCD_cidade.Nome AS CidadeNomeLocador, LCD_tipocontato.NomeTipoContato AS NomeTipoContatoLocador, LCD_contato.descricao AS ContatoLocador, LCD_estadocivil.descricao_estadocivil AS descricao_estadocivilLocador, Locador.PROFISSAO AS PROFISSAOLocador, Locatorio.NomePessoa AS NomeLocatario, Locatorio.cnpjcpf AS CPFCNPJLocatorio, Locatorio.Profissao AS PROFISSAOLocatorio, Locatorio.NACIONALIDADELocatorio AS NACIONALIDADELocatorio, LCT_estadocivil.descricao_estadocivil AS EstadoCivilLocatorio, LCT_endereco.Logadouro AS LogadouroLocatario, LCT_endereco.Numero AS NumeroLocatario, LCT_endereco.Complemento AS ComplementoLocatario, LCT_endereco.Bairro AS BairroLocatario, LCT_endereco.CEP AS CEPLocatario, LCT_endereco.CxPostal AS CxPostalLocatario, LCT_endereco.Abrev AS UFLocatario, LCT_cidade.Nome AS CidadeLocatario, LCT_tipocontato.NomeTipoContato AS TpContatoLocatario, LCT_contato.descricao AS ContatoLocatario, Representante.NomePessoa AS RepresentanteLegal, RPL_endereco.Logadouro AS LogadouroRpLegal, RPL_endereco.Numero AS NumeroRpLegal, RPL_endereco.Complemento AS ComplementoRpLegal, RPL_endereco.Bairro AS BairroRpLegal, RPL_endereco.CEP AS CEPRpLegal, RPL_endereco.CxPostal AS CxPostalRpLegal, RPL_endereco.Abrev AS UFRpLegal, RPL_cidade.Nome AS CidadeRpLegal, RPL_contato.descricao AS ContatoRpLegal, RPL_tipocontato.NomeTipoContato AS TpContatoRpLegal, Representante.NACIONALIDADE AS NACIONALIDADERpLegal, Representante.PROFISSAO AS PROFISSAORpLegal, Representante.cpfcnpj AS cpfcnpjRpLegal, Representante.numerodocumentoidentidade AS numerodocumentoidentidadeRpLegal, RPL_estadocivil.descricao_estadocivil AS EstadoCivilRpLegal, Fiador.nomepessoa AS NomeFiador, Fiador.cpfcnpj AS CPFCNPJFiador, Fiador.NACIONALIDADE AS NACIONALIDADEFiador, Fiador.PROFISSAO AS PROFISSAOFiador, Fiador_estadocivil.descricao_estadocivil AS EstadoCivilFiador, Fiador_endereco.Logadouro AS LogadouroFiador, Fiador_endereco.Numero AS NumeroFiador, Fiador_endereco.Complemento AS ComplementoFiador, Fiador_endereco.Bairro AS BairroFiador, Fiador_endereco.CEP AS CEPFiador, Fiador_endereco.CxPostal AS CxPostalFiador, Fiador_endereco.Abrev AS UFFiador, Fiador_cidade.Nome AS CidadeFiador, Fiador_tipocontato.NomeTipoContato AS TpContatoFiador, Fiador_contato.descricao AS ContatoFiador FROM (((((((((((((((((bmp_dadoslocador AS Locador INNER JOIN ((bpm_contratos INNER JOIN bpm_imovel ON bpm_contratos.IDIMOVEL = bpm_imovel.IdImovel) LEFT JOIN cidade AS IMV_cidade ON bpm_imovel.IdCidade = IMV_cidade.CidadeId) ON Locador.idpessoa = bpm_contratos.IDLOCADOR) LEFT JOIN endereco AS LCD_Endereco ON bpm_contratos.IDLOCADOR = LCD_Endereco.IdPessoa) LEFT JOIN (tipocontato AS LCD_tipocontato RIGHT JOIN bpm_contato AS LCD_contato ON LCD_tipocontato.IdTipoContato = LCD_contato.IdTipoContato) ON bpm_contratos.IDLOCADOR = LCD_contato.IdPessoa) LEFT JOIN cidade AS LCD_cidade ON LCD_Endereco.CidadeId = LCD_cidade.CidadeId) LEFT JOIN estadocivil AS LCD_estadocivil ON Locador.idestadocivil = LCD_estadocivil.idestadocivil) LEFT JOIN bmp_dadoslocatorio AS Locatorio ON bpm_contratos.IDLOCATORIO = Locatorio.IdLocatorio) LEFT JOIN (endereco AS LCT_endereco LEFT JOIN cidade AS LCT_cidade ON LCT_endereco.CidadeId = LCT_cidade.CidadeId) ON bpm_contratos.IDLOCATORIO = LCT_endereco.IdPessoa) LEFT JOIN (bpm_contato AS LCT_contato LEFT JOIN tipocontato AS LCT_tipocontato ON LCT_contato.IdTipoContato = LCT_tipocontato.IdTipoContato) ON bpm_contratos.IDLOCATORIO = LCT_contato.IdPessoa) LEFT JOIN estadocivil AS LCT_estadocivil ON Locatorio.idestadocivil = LCT_estadocivil.idestadocivil) LEFT JOIN bpm_pessoa AS Representante ON Locatorio.IdRepresentante = Representante.idpessoa) LEFT JOIN (endereco AS RPL_endereco LEFT JOIN cidade AS RPL_cidade ON RPL_endereco.CidadeId = RPL_cidade.CidadeId) ON Representante.idpessoa = RPL_endereco.IdPessoa) LEFT JOIN (bpm_contato AS RPL_contato LEFT JOIN tipocontato AS RPL_tipocontato ON RPL_contato.IdTipoContato = RPL_tipocontato.IdTipoContato) ON Representante.idpessoa = RPL_contato.IdPessoa) LEFT JOIN estadocivil AS RPL_estadocivil ON Representante.idestadocivil = RPL_estadocivil.idestadocivil) LEFT JOIN bpm_pessoa AS Fiador ON Locatorio.IdFiador = Fiador.idpessoa) LEFT JOIN endereco AS Fiador_endereco ON Locatorio.IdFiador = Fiador_endereco.IdPessoa) LEFT JOIN estadocivil AS Fiador_estadocivil ON Fiador.idestadocivil = Fiador_estadocivil.idestadocivil) LEFT JOIN (tipocontato AS Fiador_tipocontato RIGHT JOIN bpm_contato AS Fiador_contato ON Fiador_tipocontato.IdTipoContato = Fiador_contato.IdTipoContato) ON Locatorio.IdFiador = Fiador_contato.IdContato) LEFT JOIN cidade AS Fiador_cidade ON Fiador_endereco.CidadeId = Fiador_cidade.CidadeId WHERE (((bpm_contratos.IDCONTRATO)=:IdContato))
Paulo Andrade
Curtir tópico
+ 0Posts
28/08/2012
William
OBS.:Colega não sei se é o seu caso, mas existem situações em que o excesso de normalizações no banco de dados podem ocasionar essa complexidade para montar uma instrução SQL, já li até literaturas falando sobre Desnormalização de banco de dados.
Gostei + 0
28/08/2012
Eduardo Gonçalves
Gostei + 0
28/08/2012
Paulo Andrade
Seria o caso de criar outros DataSet separando cada item?
Ex.:
DataSetLocador
DataSetLocatario
DataSetFiador...
Gostei + 0
28/08/2012
William
Quantas tabelas estão envolvidas na consulta?
Vamos tentar primeiro reduzir essa instrução SQL e posteriormente encontrar o problema de só trazer um contrato.
Gostei + 0
28/08/2012
Paulo Andrade
Quantas tabelas estão envolvidas na consulta?
Vamos tentar primeiro reduzir essa instrução SQL e posteriormente encontrar o problema de só trazer um contrato.
Na verdade, todos estão na tabela Pessoas, o que diferencia é um campo boolean. Se el for fiador, no campo fiador da tabela pessoas estará como true.
Gostei + 0
28/08/2012
William
1 - bpm_contratos
2 - bpm_imovel
3 - Locador
4 - IMV_cidade
5 - LCD_Endereco
6 - LCD_cidade
7 - Locatorio
8 - LCD_tipocontato
9 - LCT_estadocivil
10 - RPL_contato
etc.....
Volto a perguntar, quantas tabelas estão envolvidas na consulta?
Gostei + 0
28/08/2012
Paulo Andrade
1 - bpm_contratos
2 - bpm_imovel
3 - Locador
4 - IMV_cidade
5 - LCD_Endereco
6 - LCD_cidade
7 - Locatorio
8 - LCD_tipocontato
9 - LCT_estadocivil
10 - RPL_contato
etc.....
Volto a perguntar, quantas tabelas estão envolvidas na consulta?
São 27 tabelas no total.
O que preciso no sistema é:
Dados de Locador
Dados Locatário (endereço,documento,contato,dados trabalho)
Dados fiador (endereço,documento,contato,dados trabalho)
dados conjugue
dados representante legal
dados do contrato
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)