none
INNER JOIN em 4 tabelas RRS feed

  • Pergunta

  • Boa noite pessoal, to tentando uma query com 4 tabelas e em todas tem o campo cpfcgc em todas. Tentei assim depois de pesquisar no forum mas esta dando esse erro. 

    ORA-00920: invalid relational operator

    OleDbCli.SelectCommand.CommandText = "SELECT CORRWIN.TSCCLIBOL.CD_CLIENTE, CORRWIN.TSCCLIBOL.CD_CPFCGC, CORRWIN.TSCCLIBOL.DT_NASC_FUND, CORRWIN.TSCCLIBOL.IN_SITUAC," _
                & "CORRWIN.TSCCLIBOL.DT_CRIACAO, CORRWIN.TSCCLIBOL.CD_ASSESSOR, CORRWIN.TSCCLIGER.CD_CPFCGC AS Expr1," _
                & "CORRWIN.TSCCLIGER.DT_NASC_FUND AS Expr2, CORRWIN.TSCCLIGER.NM_CLIENTE, CORRWIN.TSCCLICC.CD_CLIENTE AS Expr4, " _
                & "CORRWIN.TSCCLICC.CD_BANCO, CORRWIN.TSCCLICC.NR_AGENCIA, CORRWIN.TSCCLICC.NR_CTACORR, CORRWIN.TSCENDE.CD_CPFCGC AS Expr7," _
                & "CORRWIN.TSCENDE.DT_NASC_FUND AS Expr8, CORRWIN.TSCENDE.NR_SEQ_ENDE, CORRWIN.TSCENDE.NM_LOGRADOURO, CORRWIN.TSCENDE.NR_PREDIO," _
                & "CORRWIN.TSCENDE.NM_COMP_ENDE, CORRWIN.TSCENDE.NM_BAIRRO, CORRWIN.TSCENDE.NM_CIDADE, CORRWIN.TSCENDE.SG_ESTADO," _
                & "CORRWIN.TSCENDE.SG_PAIS, CORRWIN.TSCENDE.CD_CEP, CORRWIN.TSCENDE.NR_TELEFONE, CORRWIN.TSCENDE.NM_E_MAIL," _
                & "CORRWIN.TSCCLIBOL.PC_CORCOR_PRIN, CORRWIN.TSCCLIBOL.PC_CORCOR_OUTR FROM CORRWIN.TSCCLIBOL, CORRWIN.TSCCLIGER, CORRWIN.TSCCLICC, CORRWIN.TSCENDE" _
                & " INNER JOIN TSCCLIBOL ON TSCCLIGER.CD_CPFCGC = TSCCLIBOL.CD_CPFCGC AND INNER JOIN TSCCLIBOL ON CORRWIN.TSCCLICC.CD_CPFCGC = TSCCLIBOL.CD_CPFCGC AND " _
                & " INNER JOIN TSCCLIBOL ON TSCCENDE.CD_CPFCGC = TSCCLIBOL.CD_CPFCGC WHERE CORRWIN.TSCCLIBOL.IN_SITUAC <> 'A' ORDERE BY CD_CLIENTE "

    Posso fazer desse jeito?

    quinta-feira, 2 de maio de 2013 21:27

Respostas

  • Nao..

    NAo é "INNER JOIN tabela on criterio AND INNER JOIN".. esse AND antes de cada inner join é que esta fazendo a meleca.

    O certo é 

    Select <Campos> 
    From Tabela1 
    Inner Join Tabela2 on <criterio ligaçao>
    Inner Join Tabela3 on <criterio ligaçao>
    Inner Join Tabela4 on <criterio ligaçao>
    Where <criterio geral>

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    • Marcado como Resposta RJCERRI sexta-feira, 3 de maio de 2013 19:07
    quinta-feira, 2 de maio de 2013 22:07
    Moderador
  • Voce nao pode fazer isso: SELECT TSCCLIBOL.*, TSCCLIGER.*, TSCCLICC.*, TSCENDE.*

    Note que o campo CD_CPFCGC existe em todas as suas tabelas... Quando vc faz * voce diz para trazer todos os campos, dai ocorre que como existem campos com o mesmo nome o Oracle nao sabe o que fazer.

    Faça um Select com campos definidos... Outra coisa usar * é ruim para a performance.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    sexta-feira, 3 de maio de 2013 17:07
    Moderador

Todas as Respostas

  • Nao..

    NAo é "INNER JOIN tabela on criterio AND INNER JOIN".. esse AND antes de cada inner join é que esta fazendo a meleca.

    O certo é 

    Select <Campos> 
    From Tabela1 
    Inner Join Tabela2 on <criterio ligaçao>
    Inner Join Tabela3 on <criterio ligaçao>
    Inner Join Tabela4 on <criterio ligaçao>
    Where <criterio geral>

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    • Marcado como Resposta RJCERRI sexta-feira, 3 de maio de 2013 19:07
    quinta-feira, 2 de maio de 2013 22:07
    Moderador
  • Obrigado William, dei uma arrumada apos a sua dica, passei daquele erro mas agora ta dando outro.

    ORA-00933: SQL command not properly ended não estou conseguindo achar o porque desse erro, vc pode me ajudar?

    SELECT CORRWIN.TSCCLIBOL.*, CORRWIN.TSCCLIGER.*, CORRWIN.TSCCLICC.*, CORRWIN.TSCENDE.* 
     FROM CORRWIN.TSCCLIBOL 
     INNER JOIN CORRWIN.TSCCLIGER ON CORRWIN.TSCCLIBOL.CD_CPFCGC = CORRWIN.TSCCLIGER.CD_CPFCGC  
     INNER JOIN CORRWIN.TSCCLICC ON CORRWIN.TSCCLIBOL.CD_CPFCGC = CORRWIN.TSCCLICC.CD_CPFCGC  
     INNER JOIN CORRWIN.TSCENDE ON CORRWIN.TSCCLIBOL.CD_CPFCGC = CORRWIN.TSCCENDE.CD_CPFCGC  
     WHERE CORRWIN.TSCCLIBOL.IN_SITUAC <> A ORDERE BY CD_CLIENTE

    sexta-feira, 3 de maio de 2013 13:58
  • A unica coisa que eu vi errado é esse:

     ORDERE BY CD_CLIENTE

    O correto é

     ORDER BY CD_CLIENTE


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    sexta-feira, 3 de maio de 2013 15:23
    Moderador
  • É mesmo dei esse mole, mas agora o erro é esse ORA-00964: table name not in FROM list

    ELECT CORRWIN.TSCCLIBOL.*, CORRWIN.TSCCLIGER.*, CORRWIN.TSCCLICC.*, CORRWIN.TSCENDE.* 
     FROM TSCCLIBOL 
     INNER JOIN TSCCLIGER ON TSCCLIBOL.CD_CPFCGC = TSCCLIGER.CD_CPFCGC  
     INNER JOIN TSCCLICC ON TSCCLIBOL.CD_CPFCGC = TSCCLICC.CD_CPFCGC  
     INNER JOIN TSCENDE ON TSCCLIBOL.CD_CPFCGC = TSCCENDE.CD_CPFCGC  
     WHERE TSCCLIBOL.IN_SITUAC <> A ORDER BY CD_CLIENTE

    sexta-feira, 3 de maio de 2013 16:22
  • Dei outra mudada e ficou assim, e o erro agora é esse: ORA-00918: column ambiguously defined
    SELECT TSCCLIBOL.*, TSCCLIGER.*, TSCCLICC.*, TSCENDE.*
    FROM TSCCLIBOL
    INNER JOIN TSCCLIGER ON TSCCLIGER.CD_CPFCGC=TSCCLIBOL.CD_CPFCGC
    INNER JOIN TSCCLICC ON TSCCLICC.CD_CPFCGC=TSCCLIBOL.CD_CPFCGC
    INNER JOIN TSCENDE ON TSCENDE.CD_CPFCGC=TSCCLIBOL.CD_CPFCGC
    WHERE TSCCLIBOL.IN_SITUAC <> 'A' ORDER BY CD_CLIENTE

    sexta-feira, 3 de maio de 2013 16:41
  • Voce nao pode fazer isso: SELECT TSCCLIBOL.*, TSCCLIGER.*, TSCCLICC.*, TSCENDE.*

    Note que o campo CD_CPFCGC existe em todas as suas tabelas... Quando vc faz * voce diz para trazer todos os campos, dai ocorre que como existem campos com o mesmo nome o Oracle nao sabe o que fazer.

    Faça um Select com campos definidos... Outra coisa usar * é ruim para a performance.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Sogi informatique ltée

    sexta-feira, 3 de maio de 2013 17:07
    Moderador
  • Show, agora vou resolver outro problema, ta dando erro de memoria por causa da quantidade de registros, mas muito obrigado pela ajuda e paciencia.

    Abs

    sexta-feira, 3 de maio de 2013 19:07