【问题标题】:PG::UndefinedTable: ERROR: missing FROM-clause entry for table when using SELECT DISTINCT ONPG::UndefinedTable: 错误:使用 SELECT DISTINCT ON 时缺少表的 FROM 子句条目
【发布时间】:2015-12-19 20:30:07
【问题描述】:

我正在尝试获取已提交esas_assessment 的uniq patients 列表,按esas_assessmentcreated_at 的时间排序;对于 clinicianhas_many patients :through 一个名为 care_group_assignments 的表。

我在这里的工作是工作,但当我做到这一点时停止工作,所以clinicians has_many :esas_assessments, :through => :patients 而不是拥有 esas_assessment 具有 clinician_id 字段并直接与临床医生相关联。我需要做出这个选择,以便多个临床医生可以与esas_assessment 关联。

这是我在更改 esas_assessmentsclinicians 的关联方式之前所拥有的。这是基于this answer

<% @esas_assessments.order("patient_id, created_at DESC").select('ON (patient_id) *').uniq.limit(99).each_with_index do |esas_assessment, index| %>

这现在给了我:

PG::AmbiguousColumn: 错误: ORDER BY "patient_id" 不明确

我真的不明白为什么这些是模棱两可的,因为 patientsclinicians 都没有字段 patient_idcreated_at

为了解决这个问题,我使用了this answer 并在模棱两可的字段之前添加了esas_assessment.

<% @esas_assessments.order("esas_assessment.patient_id, esas_assessment.created_at DESC").select('ON (esas_assessment.patient_id) *').uniq.limit(99).each_with_index do |esas_assessment, index| %>

这给了我错误:

PG::UndefinedTable: 错误:缺少表“esas_assessment”的 FROM 子句条目

: SELECT  DISTINCT ON (esas_assessment.patient_id) * FROM "esas_assessments"
INNER JOIN "patients" ON "esas_assessments"."patient_id" = "patients"."id"
INNER JOIN "care_group_assignments"
ON "patients"."id" = "care_group_assignments"."patient_id"
WHERE "care_group_assignments"."clinician_id" = $1
ORDER BY esas_assessment.patient_id, esas_assessment.created_at DESC LIMIT 99

我也尝试过使用this answer,因为它似乎是一个类似的问题,但无法解决。

任何帮助都会很棒。

Rails 4.1.8,红宝石 2.2.1p85,PostgreSQL

【问题讨论】:

    标签: ruby-on-rails ruby postgresql activerecord


    【解决方案1】:

    我相信您只是在表名上缺少s

    <% @esas_assessments.order("esas_assessments.patient_id, 
      esas_assessments.created_at DESC")
      .select('ON (esas_assessments.patient_id) *')
      .uniq.limit(99).each_with_index do |esas_assessment, index| %>
    

    表名是esas_assessments,而不是esas_assessment

    【讨论】:

    • 一个非常简单的答案 - 谢谢。你知道为什么在列名前不加esas_assessments.会模棱两可吗?
    • 好吧,我假设@esas_assessments 已经被一些查询填充了。也许这个查询从另一个表中带来了一个patient_id,所以当你尝试在之前的ActiveRecordRelation 中使用order 时,它会抱怨它不知道你在说哪个patient_id。但无论如何,这只是一个猜测。 =]
    猜你喜欢
    • 1970-01-01
    • 2015-01-22
    • 2019-02-17
    • 2016-03-24
    • 2018-06-30
    • 2015-10-30
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多