[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