Объединение 2 записей с одинаковым значением столбца из одной таблицы - PullRequest
0 голосов
/ 19 января 2011

Как я могу объединить две записи, которые имеют один и тот же столбец?Например, учитывая, что значение столбца parent для двух записей одинаково, я хочу объединить эти две.Это невозможно с GROUP BY, поскольку он вернет только одну запись.

Задача должна быть выполнена в Rails.

Ответы [ 2 ]

1 голос
/ 19 января 2011

С учетом таблицы 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.id и b.id не совпадают, чтобы вы не получили результаты "Foo Foo" и "Bar Bar", и вам также нужно заказать их, если вы не хотите обаРезультаты "Foo Bar" и "Bar Foo".

Вы также можете выполнить конкатенацию строк непосредственно в своем запросе.Для этой цели разные СУБД используют разный синтаксис;для MySQL я считаю, что это будет:

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

(Для полноты MSSQL использует оператор + для конкатенации строк, а PostgreSQL и SQLite используют оператор ||.)

0 голосов
/ 19 января 2011

Насколько я знаю, лучший вариант - это запросить их все и объединить их в Ruby Land.

Что-то вроде:

Model.where(:parent => 1).collect(&:message).join
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...