Объединение 2 записей с одинаковым значением столбца из одной таблицы

0

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

Задача должна быть достигнута в Rails.

  • 3
    Что значит «клубить» запись?
  • 0
    club как присоединиться к ним ... так что если у вас есть запись message = abc, parent = 1, а другая как message = xyz и parent = 1, тогда я хочу получить 2 из них таким образом, чтобы я мог сделать строка как message1 + message2
Показать ещё 3 комментария
Теги:
ruby-on-rails-3

2 ответа

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.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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню