[firebase-br] Socorro!!! SQL Cartesiano!!
Giovani Benedetti Penha
giovani em cooperval.com
Qua Ago 3 16:07:20 -03 2005
O problema do left é que ele traz todas as tuplas da tabela 1 , mesmo
que o campo não tenha um correspondente na tabela 2. Por isso estão
aparecendo milhares de registros ai :)
Tenta bolar uma stored procedure então, que seleciona se é pessoa física
ou jurídica em tempo de execução e faz o select na tabela correta.
[]s
Giovani Benedetti Penha
Francisco Thiago escreveu:
> Então.. acontece que eu não posso tirar o Left... pq a pessoa em
> questão pode ser uma "Pessoa Física", logo, não terei ela cadastrada
> em Cad_Juridica e o meu sql não traria nada...
>
>
> ----- Original Message ----- From: "Giovani Benedetti Penha"
> <giovani em cooperval.com>
> To: "FireBase" <lista em firebase.com.br>
> Sent: Wednesday, August 03, 2005 3:33 PM
> Subject: Re: [firebase-br] Socorro!!! SQL Cartesiano!!
>
>
>> Tente tirar os left join e colocar inner join... Veja se resolve seu
>> problema.
>>
>> []´s
>> Giovani Benedetti Penha
>>
>> Francisco Thiago escreveu:
>>
>>> Caros amigos,
>>>
>>> Tenho um sql que está trazendo 14000 registros quando era pra trazer
>>> apenas um...
>>> Acredito que isso acontece pcausa da estrutura adotada. Será que
>>> vocês poderiam me ajudar a resolver esse SQL?
>>>
>>>
>>> Obrigado
>>>
>>> Thiago
>>>
>>> ... Select
>>> select CAD_CONHECIMENTOS.CONH_CODIGO
>>> , CAD_CONHECIMENTOS.CONH_CONHECIMENTO_N
>>> , CAD_CONHECIMENTOS.CONH_DATA_EMISSAO
>>> , CAD_CONHECIMENTOS.CONH_DATA_VENCIMENTO
>>> , CAD_CONHECIMENTOS.CFOP_CODIGO
>>> , CAD_CONHECIMENTOS.PESS_CODIGO_REMETENTE
>>> , CAD_CONHECIMENTOS.PESS_CODIGO_DESTINATARIO
>>> , CAD_CONHECIMENTOS.PESS_CODIGO_CONSIGNATARIO
>>> , CAD_CONHECIMENTOS.CONH_CONSIG_FRETE
>>> , CAD_CONHECIMENTOS.CONH_CONSIG_CALC_ATE
>>> , CAD_CONHECIMENTOS.PESS_CODIGO_REDESPACHO
>>> , CAD_CONHECIMENTOS.CONH_PAGO
>>> , CAD_CONHECIMENTOS.CONH_REDS_CONHECIMENTO_N
>>> , CAD_CONHECIMENTOS.CONH_REDS_PAGO
>>> , CAD_CONHECIMENTOS.CONH_REDS_FRETE
>>> , CAD_CONHECIMENTOS.CONH_NATUREZA
>>> , CAD_CONHECIMENTOS.VEIC_CODIGO
>>> , CAD_CONHECIMENTOS.PESS_CODIGO_MOTORISTA
>>> , CAD_CONHECIMENTOS.CONH_LOCAL_COLETA
>>> , CAD_CONHECIMENTOS.CONH_LOCAL_ENTREGA
>>> , CAD_CONHECIMENTOS.CONH_FRETE_COMBINADO
>>> , CAD_CONHECIMENTOS.CONH_FRETE_PESO_VOL
>>> , CAD_CONHECIMENTOS.CONH_FRETE_VALOR
>>> , CAD_CONHECIMENTOS.CONH_SEC_CAT
>>> , CAD_CONHECIMENTOS.CONH_DESPACHO
>>> , CAD_CONHECIMENTOS.CONH_TAXA_COLETA
>>> , CAD_CONHECIMENTOS.CONH_PEDAGIO
>>> , CAD_CONHECIMENTOS.CONH_OUTROS_VALORES
>>> , CAD_CONHECIMENTOS.CONH_TOTAL_PRESTACAO
>>> , CAD_CONHECIMENTOS.CONH_BASE_CALCULO
>>> , CAD_CONHECIMENTOS.CONH_ALIQUOTA
>>> , CAD_CONHECIMENTOS.CONH_ICMS
>>> , CAD_CONHECIMENTOS.CONH_OBS1
>>> , CAD_CONHECIMENTOS.CONH_OBS2
>>> , CAD_CONHECIMENTOS.CONH_CANCELADO
>>> , CAD_CONHECIMENTOS.CONH_GERADO_BOLETO
>>> , CAD_CONHECIMENTOS.EMPR_CODIGO
>>> , CAD_CONHECIMENTOS.CUSU_CODIGO
>>> , CAD_CFOP.CFOP_DESCRICAO
>>> , CAD_VEICULOS.MVEI_CODIGO
>>> , CAD_MARCA_VEICULO.MVEI_DESCRICAO
>>> , CAD_VEICULOS.VEIC_CIDADE
>>> , CAD_VEICULOS.VEIC_PLACA_UF
>>> , CAD_VEICULOS.VEIC_PLACA
>>> , coalesce(REM_J.CJUR_CNPJ,REM_F.CFIS_CPF) as REM_CPF_CPNJ
>>> , coalesce(REM_J.CJUR_RAZAO_SOCIAL,REM_P.PESS_NOME) as
>>> REM_RAZAO_SOCIAL
>>> , REM_E.CEND_ENDERECO as REM_ENDERECO
>>> , REM_E.CEND_BAIRRO as REM_BAIRRO
>>> , REM_E.CEND_CIDADE as REM_CIDADE
>>> , REM_E.CEND_ESTADO as REM_ESTADO
>>> , REM_P.PESS_CALCULADO_ATE as REM_CALCULADO_ATE
>>> , REM_P.PESS_TIPO_FATURAMENTO as REM_TIPO_FATURAMENTO
>>> , coalesce(REM_J.CJUR_CNPJ,DEST_F.CFIS_RG) as DEST_CPF_CPNJ
>>> , coalesce(DEST_J.CJUR_RAZAO_SOCIAL,DEST_P.PESS_NOME) as
>>> DEST_RAZAO_SOCIAL
>>> , DEST_E.CEND_ENDERECO as DEST_ENDERECO
>>> , DEST_E.CEND_BAIRRO as DEST_BAIRRO
>>> , DEST_E.CEND_CIDADE as DEST_CIDADE
>>> , DEST_E.CEND_ESTADO as DEST_ESTADO
>>> , DEST_P.PESS_CALCULADO_ATE as DEST_CALCULADO_ATE
>>> , DEST_P.PESS_TIPO_FATURAMENTO as DEST_TIPO_FATURAMENTO
>>> , coalesce(CONS_J.CJUR_CNPJ,CONS_F.CFIS_CPF) as CONS_CPF_CPNJ
>>> , coalesce(CONS_J.CJUR_RAZAO_SOCIAL,CONS_P.PESS_NOME) as
>>> CONS_RAZAO_SOCIAL
>>> , CONS_E.CEND_ENDERECO as CONS_ENDERECO
>>> , CONS_E.CEND_BAIRRO as CONS_BAIRRO
>>> , CONS_E.CEND_CIDADE as CONS_CIDADE
>>> , CONS_E.CEND_ESTADO as CONS_ESTADO
>>> , CONS_P.PESS_CALCULADO_ATE as CONS_CALCULADO_ATE
>>> , CONS_P.PESS_TIPO_FATURAMENTO as CONS_TIPO_FATURAMENTO
>>> , coalesce(REDS_J.CJUR_CNPJ,REDS_F.CFIS_CPF) as REDS_CPF_CPNJ
>>> , coalesce(REDS_J.CJUR_RAZAO_SOCIAL,REDS_P.PESS_NOME) as
>>> REDS_RAZAO_SOCIAL
>>> , REDS_E.CEND_ENDERECO as REDS_ENDERECO
>>> , REDS_E.CEND_BAIRRO as REDS_BAIRRO
>>> , REDS_E.CEND_CIDADE as REDS_CIDADE
>>> , REDS_E.CEND_ESTADO as REDS_ESTADO
>>> , REDS_P.PESS_CALCULADO_ATE as REDS_CALCULADO_ATE
>>> , REDS_P.PESS_TIPO_FATURAMENTO as REDS_TIPO_FATURAMENTO
>>> , coalesce(MOT_J.CJUR_RAZAO_SOCIAL,MOT_P.PESS_NOME) as
>>> MOT_CJUR_RAZAO_SOCIAL
>>> from CAD_CONHECIMENTOS
>>> left join CAD_CFOP on CAD_CFOP.CFOP_CODIGO =
>>> CAD_CONHECIMENTOS.CFOP_CODIGO
>>> left join CAD_VEICULOS on CAD_VEICULOS.VEIC_CODIGO =
>>> CAD_CONHECIMENTOS.VEIC_CODIGO
>>> left join CAD_MARCA_VEICULO on CAD_MARCA_VEICULO.MVEI_CODIGO =
>>> CAD_VEICULOS.MVEI_CODIGO
>>> inner join CAD_PESSOA MOT_P on MOT_P.PESS_CODIGO =
>>> CAD_CONHECIMENTOS.PESS_CODIGO_MOTORISTA
>>> left join CAD_JURIDICA MOT_J on MOT_J.PESS_CODIGO =
>>> CAD_CONHECIMENTOS.PESS_CODIGO_MOTORISTA
>>> left join CAD_PESSOA REM_P on REM_P.PESS_CODIGO =
>>> CAD_CONHECIMENTOS.PESS_CODIGO_REMETENTE
>>> left join CAD_ENDERECO REM_E on REM_E.PESS_CODIGO =
>>> CAD_CONHECIMENTOS.PESS_CODIGO_REMETENTE and REM_E.cend_cobranca = 'T'
>>> left join CAD_JURIDICA REM_J on REM_J.PESS_CODIGO =
>>> CAD_CONHECIMENTOS.PESS_CODIGO_REMETENTE
>>> left join CAD_FISICA REM_F on REM_E.PESS_CODIGO =
>>> CAD_CONHECIMENTOS.PESS_CODIGO_REMETENTE and REM_J.cjur_codigo IS NULL
>>> left join CAD_PESSOA DEST_P on DEST_P.PESS_CODIGO =
>>> CAD_CONHECIMENTOS.PESS_CODIGO_DESTINATARIO
>>> left join CAD_ENDERECO DEST_E on DEST_E.PESS_CODIGO =
>>> CAD_CONHECIMENTOS.PESS_CODIGO_DESTINATARIO and DEST_E.cend_cobranca
>>> = 'T'
>>> left join CAD_JURIDICA DEST_J on DEST_E.PESS_CODIGO =
>>> CAD_CONHECIMENTOS.PESS_CODIGO_DESTINATARIO
>>> left join CAD_FISICA DEST_F on DEST_E.PESS_CODIGO =
>>> CAD_CONHECIMENTOS.PESS_CODIGO_DESTINATARIO AND dest_j.cjur_codigo is
>>> null
>>> left join CAD_PESSOA CONS_P on CONS_P.PESS_CODIGO =
>>> CAD_CONHECIMENTOS.PESS_CODIGO_CONSIGNATARIO
>>> left join CAD_ENDERECO CONS_E on CONS_E.PESS_CODIGO =
>>> CAD_CONHECIMENTOS.PESS_CODIGO_CONSIGNATARIO and CONS_E.cend_cobranca
>>> = 'T'
>>> left join CAD_JURIDICA CONS_J on CONS_E.PESS_CODIGO =
>>> CAD_CONHECIMENTOS.PESS_CODIGO_CONSIGNATARIO
>>> left join CAD_FISICA CONS_F on CONS_E.PESS_CODIGO =
>>> CAD_CONHECIMENTOS.PESS_CODIGO_CONSIGNATARIO and cons_j.cjur_codigo
>>> is null
>>> left join CAD_PESSOA REDS_P on REDS_P.PESS_CODIGO =
>>> CAD_CONHECIMENTOS.PESS_CODIGO_REDESPACHO
>>> left join CAD_ENDERECO REDS_E on REDS_E.PESS_CODIGO =
>>> CAD_CONHECIMENTOS.PESS_CODIGO_REDESPACHO and REDS_E.cend_cobranca = 'T'
>>> left join CAD_JURIDICA REDS_J on REDS_E.PESS_CODIGO =
>>> CAD_CONHECIMENTOS.PESS_CODIGO_REDESPACHO
>>> left join CAD_FISICA REDS_F on REDS_E.PESS_CODIGO =
>>> CAD_CONHECIMENTOS.PESS_CODIGO_REDESPACHO and reds_j.cjur_codigo is null
>>> where CAD_CONHECIMENTOS.CONH_CODIGO = :CONH_CODIGO
>>>
>>> Tabelas:
>>>
>>> 1- De acordo com a Pessoa (Física/Jurídica) eu tenho um registro
>>> apenas em Cad_Física OU (exclusivo) Jurídica.
>>> 2- Posso ter vários enderecos, porém apenas um poderá ser o de
>>> cobrança (cobranca = 'T')
>>>
>>> CREATE TABLE CAD_PESSOA (
>>> PESS_CODIGO D_INTEIRO NOT NULL /* D_INTEIRO = INTEGER */,
>>> PESS_NOME D_NOME NOT NULL /* D_NOME = VARCHAR(50) */,
>>> PESS_EMAIL D_MAIL /* D_MAIL = VARCHAR(50) CHECK
>>> ((VALUE like ('%@%') and Value like ('%.%') or (Value is null))) */,
>>> PESS_SITE D_NOME /* D_NOME = VARCHAR(50) */,
>>> PESS_DATA_CADASTRO DATE NOT NULL,
>>> PESS_TIPO_PESSOA D_INTEIRO DEFAULT 3 NOT NULL /* D_INTEIRO
>>> = INTEGER */,
>>> PESS_FISICA_JURIDICA D_PBOOLEAN NOT NULL /* D_PBOOLEAN =
>>> CHAR(1) DEFAULT 'F' CHECK ((VALUE = 'T') OR (VALUE = 'F')) */,
>>> PESS_TIPO_FATURAMENTO D_INTEIRO DEFAULT 1 /* D_INTEIRO = INTEGER
>>> */,
>>> PESS_BLOQUEADO D_PBOOLEAN DEFAULT 'F' NOT NULL /*
>>> D_PBOOLEAN = CHAR(1) DEFAULT 'F' CHECK ((VALUE = 'T') OR (VALUE =
>>> 'F')) */,
>>> PESS_CONTR_ICMS D_PBOOLEAN DEFAULT 'T' NOT NULL /*
>>> D_PBOOLEAN = CHAR(1) DEFAULT 'F' CHECK ((VALUE = 'T') OR (VALUE =
>>> 'F')) */,
>>> PESS_CALCULADO_ATE D_NOME /* D_NOME = VARCHAR(50) */,
>>> PESS_OBS D_OBS /* D_OBS = VARCHAR(200) */,
>>> PESS_TELEFONE1 D_FONE /* D_FONE = CHAR(12) */,
>>> PESS_TELEFONE2 D_FONE /* D_FONE = CHAR(12) */,
>>> PESS_TELEFONE3 D_FONE /* D_FONE = CHAR(12) */,
>>> EMPR_CODIGO D_INTEIRO DEFAULT 1 NOT NULL /* D_INTEIRO
>>> = INTEGER */
>>> );
>>>
>>> CREATE TABLE CAD_FISICA (
>>> CFIS_CODIGO D_INTEIRO NOT NULL /* D_INTEIRO = INTEGER */,
>>> PESS_CODIGO D_INTEIRO NOT NULL /* D_INTEIRO = INTEGER */,
>>> CFIS_RG D_RG NOT NULL /* D_RG = VARCHAR(20) */,
>>> CFIS_CPF D_CPF NOT NULL /* D_CPF = CHAR(11) NOT NULL */,
>>> CFIS_DATANASCIMENTO DATE
>>> );
>>>
>>> CREATE TABLE CAD_JURIDICA (
>>> CJUR_CODIGO D_INTEIRO NOT NULL /* D_INTEIRO = INTEGER */,
>>> PESS_CODIGO D_INTEIRO NOT NULL /* D_INTEIRO = INTEGER */,
>>> CJUR_INSCEST D_RG NOT NULL /* D_RG = VARCHAR(20) */,
>>> CJUR_CNPJ D_DOCUMENTOS NOT NULL /* D_DOCUMENTOS =
>>> CHAR(14) */,
>>> CJUR_RAZAO_SOCIAL D_NOME NOT NULL COLLATE PXW_INTL850 /* D_NOME
>>> = VARCHAR(50) */
>>> );
>>>
>>> CREATE TABLE CAD_ENDERECO (
>>> CEND_CODIGO D_INTEIRO NOT NULL /* D_INTEIRO = INTEGER */,
>>> PESS_CODIGO D_INTEIRO NOT NULL /* D_INTEIRO = INTEGER */,
>>> CEND_ENDERECO D_ENDERECO NOT NULL /* D_ENDERECO = VARCHAR(100) */,
>>> CEND_BAIRRO D_NOME NOT NULL /* D_NOME = VARCHAR(50) */,
>>> CEND_CIDADE D_CIDADE NOT NULL /* D_CIDADE = VARCHAR(100) */,
>>> CEND_ESTADO D_UF NOT NULL /* D_UF = CHAR(2) */,
>>> CEND_CEP D_CEP NOT NULL /* D_CEP = CHAR(8) */,
>>> CEND_COBRANCA D_PBOOLEAN default 'T' NOT NULL /* D_PBOOLEAN =
>>> CHAR(1) DEFAULT 'F' CHECK ((VALUE = 'T') OR (VALUE = 'F')) */
>>> );
>>>
>>>
>>> _______________________________________________________ Yahoo!
>>> Acesso Grátis - Internet rápida e grátis. Instale o discador agora!
>>> http://br.acesso.yahoo.com/
>>>
>>>
>>> ______________________________________________
>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
>>> Para editar sua configuração na lista, use o endereço
>>> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>
>>>
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
>> Para editar sua configuração na lista, use o endereço
>> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>
>
>
>
>
>
> _______________________________________________________ Yahoo! Acesso
> Grátis - Internet rápida e grátis. Instale o discador agora!
> http://br.acesso.yahoo.com/
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
Mais detalhes sobre a lista de discussão lista