【发布时间】:2014-03-03 11:25:39
【问题描述】:
我有以下查询:
SELECT "users".*
FROM "users"
INNER JOIN "users_roles"
ON "users_roles"."user_id" = "users"."id"
INNER JOIN "roles"
ON "roles"."id" = "users_roles"."role_id"
LEFT JOIN events_users
ON events_users.user_id = users.id
LEFT JOIN events
ON events.id = events_users.event_id
LEFT JOIN booths
ON booths.user_id = users.id
GROUP BY
users.id,
roles.id,
events.id,
booths.id
ORDER BY
id ASC
我希望能够删除重复项,但如果多次出现,它似乎会生成多个重复的角色、摊位和活动。
下面是在 SQL 中生成上述查询的 Rails 活动记录命令:
users = User.
joins(:roles).
joins("LEFT JOIN events_users ON events_users.user_id = users.id LEFT JOIN events ON events.id = events_users.event_id").
joins("LEFT JOIN booths ON booths.user_id = users.id").
group("users.id, roles.id, events.id").
order("#{sort_column} #{sort_direction}")
我也试过下面没有运气:
users = User.
joins(:roles).
joins("LEFT JOIN events_users ON events_users.user_id = users.id LEFT JOIN events ON events.id = events_users.event_id").
joins("LEFT JOIN booths ON booths.user_id = users.id").
group("users.id, roles.id, events.id").
order("#{sort_column} #{sort_direction}")
select("distinct on(users.id, roles.id, events.id, booths.id) users.*")
有没有办法删除结果集中的所有重复项?
【问题讨论】:
-
向我们展示结果样本。
-
你试过'distinct'还是'uniq'?
-
有什么区别?仅在 user_id 上?还是在 {user_id, role_id) 上?
标签: sql ruby-on-rails ruby postgresql ruby-on-rails-4