Join 如何在Vertica数据库中模拟ON子句中的子查询?
为什么everbody,我在转换ON子句中包含一组子查询的查询时遇到了一些问题。 最初的代码是在SQL Server中创建的,我已改为在Vertica上工作 代码如下: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
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值: