在不相关列上的 Postgresql 错误中选择 Distinct
Posted
技术标签:
【中文标题】在不相关列上的 Postgresql 错误中选择 Distinct【英文标题】:Select Distinct in Postgresql erroring on unrelated column 【发布时间】:2015-08-19 22:15:15 【问题描述】:我正在努力编写执行以下操作的 SQL 语句:获取一组用户最近完成的评估
每个用户一个(不同的user_id
)
在选定的用户组中(user_id
在数组中)
仅完成评估(type_name
不为空)
包含所有字段(稍后将使用)
最近尝试:
SELECT DISTINCT(user_id), assessments.*
FROM assessments
WHERE
user_id IN (1,2,3,4,5,10)
AND type_name IS NOT NULL
ORDER BY
created_at DESC,
user_id DESC
当前错误:
无法识别 json 类型的相等运算符
开启:
assessments.*
我已经经历了很多不同版本的各种错误,但我认为这个应该可以工作,但它似乎试图根据所有列而不是 user_id
来区分。
我真的很希望它在 Rails 中工作,但由于我无法做到这一点,我想先让普通 SQL 工作。
更新
部分问题可能是我在评估中有 JSON 列。但由于我只在 user_id
上使用 distinct,它应该忽略那些 JSON 列
【问题讨论】:
【参考方案1】:试试这个:
Assesment.uniq(:user_id)
.where(iuser_id: [1, 2, 3])
.where
.not(type_name: nil)
更新:
由于问题确实存在于其他列中,因此我建议您将所有 json
列转换为 jsonb
(第 9.4 页魔术)
class AlterJsonbToJsonAndBack < ActiveRecord::Migration
def up
change_column :assessments, :column_name, 'jsonb USING CAST(column_name AS jsonb)'
end
def down
change_column :assessments, :column_name, 'json USING CAST(column_name AS json)'
end
end
how to use jsonb in rails
【讨论】:
我遇到和以前一样的错误,我会更新问题以提供更多相关数据 Rails 似乎忽略了uniq
中的论点。我也试过distinct
,但它转换为的查询是:SELECT DISTINCT "assessments".* FROM "assessments" WHERE "assessments"."user_id" IN (1, 2, 3) AND ("assessments"."type_name" IS NOT NULL) ORDER BY "assessments"."created_at" DESC
以上是关于在不相关列上的 Postgresql 错误中选择 Distinct的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSql jsonb 列上的 GIN 索引未在查询中使用
DB 列上的 Spring JPA 错误返回与列名相关的错误