Join 如何在Vertica数据库中模拟ON子句中的子查询?

Join 如何在Vertica数据库中模拟ON子句中的子查询?,join,subquery,vertica,Join,Subquery,Vertica,为什么everbody,我在转换ON子句中包含一组子查询的查询时遇到了一些问题。 最初的代码是在SQL Server中创建的,我已改为在Vertica上工作 代码如下: SELECT DISTINCT DocFinanceiro.AutoId AS AutoId, DocFinanceiro.Classe AS ClasseDoc, EspecPrestador.Seq AS Sequencia, PrestadorServico.Codigo AS Co

为什么everbody,我在转换ON子句中包含一组子查询的查询时遇到了一些问题。 最初的代码是在SQL Server中创建的,我已改为在Vertica上工作

代码如下:

    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
    ;
如果有人有任何想法,那就太好了

尝试替换

RegistroPessoa.AutoId=选择

到 选择中的RegistroPessoa.AutoId


并为表短名称使用别名

IN子句仅在我使用WHERE条件时有效!!!当与ON Error:[Vertica][VJDBC]4816错误一起使用时,它似乎不起作用:ON子句中的子查询不受支持SQLState:0A000 ErrorCode:4816he in子句仅在我使用WHERE条件时才起作用!!!当与ON Error:[Vertica][VJDBC]4816一起使用时,它似乎不起作用错误:ON子句中的子查询不受支持SQLState:0A000 ErrorCode:4816–我不太确定我是否得到了以下信息:并且RegistroPessoa.Tipo=1或RegistroPessoa.Tipo=1这部分没有问题!子查询按原样完美地工作!Ohhh中的值不是真实值:很抱歉,在我将查询联机之前,我更改了1值: