gpt4 book ai didi

sql - 具有相同名称列的连接表上的 Rails ".pluck"返回一个值,然后返回 nil

转载 作者:数据小太阳 更新时间:2023-10-29 06:46:32 26 4
gpt4 key购买 nike

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, 1],
[3, 1],
# ....
]

相反,这会返回实验的 id,然后返回 nil

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

这在三个方面很奇怪:

  • 即使它是一个内部联接并且只返回一个实验,我也能够从功能 (features.name) 中提取列
  • 在重复列名之前一切正常。
  • 首先报告最后采摘的列,就好像第一列被覆盖一样。切换 pluck 的顺序会切换返回值。

这似乎是一个错误,但也许我做错了什么。有什么建议吗?

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)

关于sql - 具有相同名称列的连接表上的 Rails ".pluck"返回一个值,然后返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26021818/

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