2013-05-27 62 views
-1

Hy everbody,我在轉換ON子句中有一組子查詢的查詢時遇到了一些麻煩。 最初的代碼是在SQL Server中創建的,我已更改爲在Vertica上工作。如何在Vertica數據庫的ON子句中模擬子查詢?

這是代碼:

SELECT 
    DISTINCT DocFinanceiro.AutoId AS AutoId, 
    DocFinanceiro.Classe AS ClasseDoc, 
    EspecPrestador.Seq AS Sequencia, 
    PrestadorServico.Codigo AS CodigoPrest, 
    PessoaPrest.Nome AS NomePrestador, 
    DocFinanceiro.CompFinanceira AS CompFinanceira, 
    EspecialidadeServico.Nome AS Especialidade, 
    ClassePrestador.Nome AS ClsPrestador, 
    RegistroPessoa.Numero AS RegistroINSS, 
    RegistroPessoa.Tipo AS TipoRegPessoa, 
    DocFinanceiro.DataVencimento AS DataVencimentoDocFin 
    FROM DocFinanceiro 
    INNER JOIN ClasseDocFinanceiro 
    ON DocFinanceiro.Classe = ClasseDocFinanceiro.Codigo 
    INNER JOIN ItemFinanceiro ON DocFinanceiro.AutoId = ItemFinanceiro.Documento 
    INNER JOIN ClasseApropriacaoFinan 
    ON ItemFinanceiro.ClasseApro = ClasseApropriacaoFinan.Codigo 
    INNER JOIN ContratoFinanceiro 
    ON DocFinanceiro.ContratoFinanceiro = ContratoFinanceiro.AutoId 
    INNER JOIN Pessoa ON ContratoFinanceiro.Pessoa = Pessoa.AutoId 
    INNER JOIN GeradorItemFinan 
    ON ItemFinanceiro.AutoId = GeradorItemFinan.ItemFinan 
    INNER JOIN PrestadorServico 
    ON ContratoFinanceiro.AutoId = PrestadorServico.ContratoFinanceiro 
    INNER JOIN Pessoa PessoaPrest ON PrestadorServico.Pessoa = PessoaPrest.AutoId 
    INNER JOIN TipoValorFinan 
    ON ClasseApropriacaoFinan.TipoValor = TipoValorFinan.Codigo 
    INNER JOIN ClasseContratoFinanceiro 
    ON ContratoFinanceiro.Classe = ClasseContratoFinanceiro.AutoId 
    INNER JOIN ClassePrestador 
    ON PrestadorServico.Classe = ClassePrestador.Codigo 
    LEFT JOIN EspecPrestador 
    ON EspecPrestador.Prestador = PrestadorServico.AutoId 
    AND EspecPrestador.Seq = 1 
    LEFT JOIN EspecialidadeServico 
    ON EspecialidadeServico.AutoId = EspecPrestador.Especialidade 
    LEFT JOIN RegistroPessoa ON PessoaPrest.AutoId = RegistroPessoa.Pessoa 
--This is the part where i getr stuck  
AND 
    (
     RegistroPessoa.AutoId = 
     (
      SELECT 
      RegistroPessoa.AutoId 
      FROM RegistroPessoa 
      WHERE RegistroPessoa.Pessoa = PessoaPrest.Autoid 
      AND (RegistroPessoa.Tipo = 1 OR RegistroPessoa.Tipo = 1) order by 1 limit 1 
     ) 
    ) 
--until here 
    WHERE (GeradorItemFinan.TipoGerador = 1) 
    AND (DocFinanceiro.CompFinanceira = 1) 
    AND (PrestadorServico.AutoId = 1) 
    AND DocFinanceiro.CompSeq = 1 
    AND (DocFinanceiro.Numero IS NOT NULL) 
    AND (DocFinanceiro.Classe <> 1) 
    ORDER BY AutoId, Sequencia 
    ; 

如果任何人有任何想法,這將是偉大的!

+0

他「IN」條款將工作,只有當我已經用WHERE條件!!!使用「ON」時似乎不起作用錯誤:[Vertica] [VJDBC](4816)錯誤:ON子句中的子查詢不受支持SQLState:0A000 ErrorCode:4816 - –

+0

我不太確定我得到此: AND(RegistroPessoa.Tipo = 1 OR RegistroPessoa.Tipo = 1) – kimbo305

+0

這部分沒有錯!子查詢完美地工作! –

回答

1

嘗試更換

RegistroPessoa.AutoId =(SELECT ...)

到 RegistroPessoa.AutoId IN(SELECT ...)

,並使用別名表短名稱

+0

恐怕這並沒有伎倆! –

+0

「IN」條款只適用於當我用WHERE條件!這似乎不符合使用 「ON」 錯誤時的工作:[Vertica的] [VJDBC](4816)ERROR:ON子句中的子查詢中不支持 SQLSTATE:0A000 錯誤代碼:4816 –