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

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


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/





Mais detalhes sobre a lista de discussão lista