gpt4 book ai didi

mysql - ActiveRecord 从类中选择一个属性

转载 作者:行者123 更新时间:2023-11-29 11:50:49 24 4
gpt4 key购买 nike

我有一个 SQL 查询,我想使用 ActiveRecord 查询接口(interface)编写,但我无法猜测 ActiveRecord 将为该表提供什么别名。这是 SQL 查询:

SELECT P2.NUM_DOCUMENTO FROM
SCHEMA1.PESSOA_CPBS PC
INNER JOIN SCHEMA2.PESSOA P ON(PC.PESSOA = P.ID_PESSOA)
INNER JOIN SCHEMA2.REPRESENTANTE_LEGAL R ON(R.PESSOA = P.ID_PESSOA)
INNER JOIN SCHEMA2.PESSOA P2 ON(R.REPRESENTANTE_LEGAL = P2.ID_PESSOA)
WHERE PC.INSCRICAO = ?

这是用 Ruby(ActiveRecord) 编写的相同查询:

Pessoa::PessoaCPBS.joins(pessoa: [representantes: :representante])
.select('representante.num_documento')
.where('inscricao = :inscricao', inscricao: ?)

ActiveRecord 生成以下 SQL:

SELECT 
representante.num_documento
FROM
"SCHEMA1"."PESSOA_CPBS"
INNER JOIN "SCHEMA2"."PESSOA" ON "SCHEMA2"."PESSOA"."ID_PESSOA" = "SCHEMA1"."PESSOA_CPBS"."PESSOA"
INNER JOIN "SCHEMA2"."REPRESENTANTE_LEGAL" ON "SCHEMA2"."REPRESENTANTE_LEGAL"."PESSOA" = "SCHEMA2"."PESSOA"."ID_PESSOA"
INNER JOIN "SCHEMA2"."PESSOA" "REPRESENTANTE_GRPFOR_REPRESENT" ON "REPRESENTANTE_GRPFOR_REPRESENT"."ID_PESSOA" = "SCHEMA2"."REPRESENTANTE_LEGAL"."REPRESENTANTE_LEGAL"
WHERE (inscricao = ?)

我收到以下错误:

ActiveRecord::JDBCError: java.sql.SQLSyntaxErrorException: ORA-00904: "REPRESENTANTE"."NUM_DOCUMENTO": invalid identifier

这是我希望 ActiveRecord 吐出的查询:

SELECT 
"REPRESENTANTE_GRPFOR_REPRESENT"."NUM_DOCUMENTO"
FROM
"SCHEMA1"."PESSOA_CPBS"
INNER JOIN "SCHEMA2"."PESSOA" ON "SCHEMA2"."PESSOA"."ID_PESSOA" = "SCHEMA1"."PESSOA_CPBS"."PESSOA"
INNER JOIN "SCHEMA2"."REPRESENTANTE_LEGAL" ON "SCHEMA2"."REPRESENTANTE_LEGAL"."PESSOA" = "SCHEMA2"."PESSOA"."ID_PESSOA"
INNER JOIN "SCHEMA2"."PESSOA" "REPRESENTANTE_GRPFOR_REPRESENT" ON "REPRESENTANTE_GRPFOR_REPRESENT"."ID_PESSOA" = "SCHEMA2"."REPRESENTANTE_LEGAL"."REPRESENTANTE_LEGAL"
WHERE (inscricao = ?)

我如何猜测该表将获得的别名???

最佳答案

您可以更改为:

Pessoa::PessoaCPBS.select('representate_grpfor_represent.num_documento')
.joins(pessoa: [representantes: :representante])
.where('inscricao = ?', "put-your-search-string-here")

select 表中添加 joins 别名,您可以执行以下操作:

Pessoa::PessoaCPBS.select('P2.num_documento')
.joins("AS PC INNER JOIN SCHEMA2.PESSOA P ON(PC.PESSOA = P.ID_PESSOA) INNER JOIN SCHEMA2.REPRESENTANTE_LEGAL R ON(R.PESSOA = P.ID_PESSOA) INNER JOIN SCHEMA2.PESSOA P2 ON (R.REPRESENTANTE_LEGAL = P2.ID_PESSOA)")
.where('PC.inscricao = ?', "put-your-search-string-here")

您可以修复您的必要问题,因为您的第一个查询和最后一个查询不同,特别是在最后一个INNER JOIN中。

希望这对您有帮助。

关于mysql - ActiveRecord 从类中选择一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34090003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com