【问题标题】:sql: DISTINCT give me duplicate resultssql: DISTINCT 给我重复的结果
【发布时间】:2014-09-16 10:54:43
【问题描述】:

您好,我正在使用以下查询

 Message.select("DISTINCT(commentable_id, user_id) as owner_id").map(&:owner_id)

它给了我这样的结果: ["(8,9)", "(8,84)", "(9,8)", "(84,8)"]

这里 "(8, 9)" 和 "(9, 8)" 的返回值不同,但我只想要一条记录。方法 结果应该是这样的

["(8,9)", "(8,84)"] 那么我该如何实现呢。

更新

My table:

id | user_id | commentable_id
1  |  8      |      9
2  |  8      |      84
3  |  9      |      8
4  |  84     |      8
5  |  8      |     84

我想要 id 为 1、2 的结果。 实际上这是对话视图,所以我要么是发送者(user_id),要么是接收者(commentable_id)。 如果我是 id 为 8 的用户,那么在我的对话视图中,我将只有两个 id 为 9 和 84 的用户。

谢谢

【问题讨论】:

  • 你只是想要一个数组?

标签: mysql ruby-on-rails activerecord active-relation


【解决方案1】:

您可以使用greatest()least() 函数在SQL 中表达您想要的内容:

select distinct least(user_id, commentable_id) as id1, greatest(user_id, commentable_id) as id2
from mytable;

您也应该能够在 Ruby on Rails 中表达这一点。

【讨论】:

    【解决方案2】:

    SQL DISTINCT 按其设计用途工作。仅从 SQL 执行此操作可能太困难了。由于您使用的是 Ruby,我建议使用 for-in 循环或其他方法来进一步过滤掉结果。

    【讨论】:

      猜你喜欢
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 2011-05-02
      • 2018-11-25
      • 1970-01-01
      相关资源
      最近更新 更多