sql – 使用相同名称的列连接表上的Rails“.pluck”返回一个值,然后返回nil

前端之家收集整理的这篇文章主要介绍了sql – 使用相同名称的列连接表上的Rails“.pluck”返回一个值,然后返回nil前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Experiment has_many :features 
Feature belongs_to :experiment

Experiment.where("experiments.id=1")
    .joins(:features)
    .pluck("features.id","experiments.id")

我希望这会返回每个功能的ID和实验的ID.

[
    [1,1],[2,[3,# ....
]

相反,这将返回实验的ID,然后返回nil

[
    [1,nil],[1,# ....
]

这有三个方面很奇怪:

>即使它是一个内连接,只返回一个实验,我能够从功能提取列(features.name)
>一切都很好,直到重复列名称.
>首先报告最后一个弹出列,就好像第一列被覆盖一样.切换拔除顺序会切换返回值.

这似乎是一个错误,但也许我做错了什么.有小费吗?

sql输出

SELECT features.id,experiments.id FROM "experiments" INNER JOIN "features" ON "features"."experiment_id" = "experiments"."id" WHERE (experiments.id=1)

注意.这是一个与查询类似的简化问题:

Experiment.where("experiments.id=1")
    .joins(feature: { child2: { :child3 } })
    .pluck("feature.id,child3.id")

解决方法

这有点棘手.由于存在INNER JOIN,因此查询在此实例中仅生成一个id.实际上你可以反过来形成查询
Feature.joins(:experiment)
       .where(features: { experiment_id: 1 })
       .pluck(:id,:experiment_id)

要么:

Feature.joins(:experiment)
       .where(experiments: { id: 1 })
       .pluck(:id,:experiment_id)

猜你在找的MsSQL相关文章