Как я могу объединить две записи, которые имеют один и тот же столбец? Например, если значение столбца parent
для двух записей одинаково, я хочу объединить эти два. Это невозможно с помощью GROUP BY
, поскольку он будет возвращать только одну запись.
Задача должна быть достигнута в Rails.
Для таблицы 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 используют оператор ||
.)
Насколько я знаю, лучший вариант - это запросить для всех их и объединить их на земле Ruby.
Что-то вроде:
Model.where(:parent => 1).collect(&:message).join
message
= abc,parent
= 1, а другая какmessage
=xyz
иparent
= 1, тогда я хочу получить 2 из них таким образом, чтобы я мог сделать строка как message1 + message2