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

Francisco Thiago jeandeadlucky em yahoo.com.br
Qua Ago 3 15:52:07 -03 2005


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/





Mais detalhes sobre a lista de discussão lista