我正在尝试使用activerecord进行sql查询,而我很难从多个连接表中指定特定列。
例如在sql
中select go.id, sequence.name, sequence.id from sequence join (goterms,...) on ...
这不是很漂亮的sql,但我的意思是我能够指定哪个.id我想要返回
在activerecord中我这样做:
results = Sequence.joins(:Foreigndb,:Goterm,:Taxa)
.select(:header,:taxaclass, :genus, :interpro_desc,:description,:dbname,:read_depth, :name)
.distinct
我希望能够获取id:Goterm但是:Taxa和:Foreigndb也使用id作为数据库中的列,所以当我执行以下操作时,我会得到无法解释的错误,我认为这些错误源于此问题。 / p>
results = Sequence.joins(:Foreigndb,:Goterm,:Taxa)
.select(:header,:taxaclass, :genus, :interpro_desc,:description,:dbname,:read_depth, :name,:id)
.distinct
指定我想要Goterm.id的正确方法是什么?
编辑 - 这是错误:
ActiveRecord :: StatementInvalid:Mysql2 :: Error:'字段列表'中的未知列'Goterm.id'
我跑的时候: results = Sequence.joins(:Foreigndb,:Goterm,:Taxa).select(:header,:taxaclass,:genus,:interpro_desc,:description,:dbname,:read_depth,:name,'Goterm.id')。limit (5).offset(0).dresults = Sequence.joins(:Foreigndb,:Goterm,:Taxa).select(:header,:taxaclass,:genus,:interpro_desc,:description,:dbname,:read_depth,:name 'Goterm.id')。极限(5).offset(0).distinct
答案 0 :(得分:0)
results = Sequence.joins(:Foreigndb,:Goterm,:Taxa).select(:header,:taxaclass, :genus, :interpro_desc,:description,:dbname,:read_depth, :name, 'sequences.id')
.distinct
答案 1 :(得分:0)
事实证明,ilan的答案是正确的,但要确保一切都是小写的。当我需要'goterm.id'时,我正在使用'Goterm.id'进行选择
如果有其他人遇到此问题,我也遇到了从返回的查询对象中获取goterm.id数据的困难。每次我在返回集上调用object.id时,它会给我一些与我期望的不同的东西。我认为我期待的属性被别的东西遮挡了。为了获得我需要的数据,我做了以下工作:
results = Sequence.joins(:Foreigndb,:Goterm,:Taxa).select(:header,:taxaclass, :genus,:interpro_desc,:description,:dbname,:read_depth, :name).distinct
firstRes = results[0]
firstRes.attributes['id']