[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