[firebase-br] Socorro!!! SQL Cartesiano!!

Giovani Benedetti Penha giovani em cooperval.com
Qua Ago 3 15:33:05 -03 2005


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
>
>




Mais detalhes sobre a lista de discussão lista