将2个记录与同一个表中的相同列值组合在一起

时间:2011-01-19 16:09:30

标签: mysql ruby-on-rails ruby ruby-on-rails-3

如何组合两个具有相同列的记录?例如,假设两个记录的parent列值相同,我想将这两个值组合在一起。 GROUP BY无法做到这一点,因为它只返回一条记录。

任务必须在Rails中实现。

2 个答案:

答案 0 :(得分:1)

给定具有此结构和数据的表messages

id  parent_id  message
--  ---------  -------
1   42         Foo
2   42         Bar

然后你可以进行这个SQL查询:

    SELECT a.message AS message1, 
           b.message AS message2
      FROM messages a
INNER JOIN messages b ON a.parent_id=b.parent_id
     WHERE a.id<b.id;

得到这个结果:

message1 message2
-------- --------
Foo      Bar

您需要确保a.idb.id不一致,以免导致结果"Foo Foo""Bar Bar",并且您还需要除非您同时需要"Foo Bar""Bar Foo"结果,否则请订购它们。

您还可以选择直接在查询中执行字符串连接。不同的RDBMS使用不同的语法;对于MySQL我相信它会是:

SELECT concat(a.message, b.message) AS clubbed_message
       ...

(为了完整性,MSSQL使用+运算符进行字符串连接,PostgreSQL和SQLite使用||运算符。)

答案 1 :(得分:0)

据我所知,最好的选择是查询所有它们并在Ruby域中连接它们。

类似的东西:

Model.where(:parent => 1).collect(&:message).join