У меня есть две таблицы:SQL запрос с использованием GROUP_CONCAT() функция
1.Activity-- which stores all the activities from a user
2.User-- which stores all the registered users
Я хочу получать все сообщения и любит всех сообщений в одном запросе. Строка - это сообщение или подобное, определяется значением типа.
Имя таблицы - активность
| actId | parentId | type | postedby |
---------------------------------------------------
| 100 | NULL | post | 100 |
| 200 | 100 | like | 200 |
| 300 | 100 | like | 300 |
| 400 | 100 | like | 400 |
| 500 | NULL | post | 100 |
| 600 | 500 | like | 600 |
Имя таблицы - Пользователь
| userId | name |
-------------------
| 100 | Amit |
| 200 | Alok |
| 300 | Arjun |
| 400 | Arpeet |
| 600 | Amaan |
Выход должен быть
| actId | name | LikedBy |
------------------------------------------
| 100 | Amit | Alok, Arjun, Arpeet|
| 500 | Amit | Amaan |
ПРИМЕЧАНИЕ - Я не хочу, чтобы это достигалось с помощью FOR XML PATH, так как он не поддерживается в SQLite, над которым я работаю.
Моя попытка запроса была
SELECT a.id, u.name,
(select group_concat(u.name) from activity a, user u where a.id = u.id and a.type = 'like'
group by a.parent) as likedby
FROM activity a, user u
WHERE a.id = u.id and a.type = 'post'
В результате я получил
| Id | name | LikedBy |
---------------------------------------
| 100 | Amit | Alok, Arjun, Arpeet|
Вы можете видеть, что другой ряд не хватало результата.
Для какой СУБД вам нужно решение? – Jens
@Jens, мне это нужно для SQLite. Но это может быть не так много, поскольку запрос будет почти таким же. –
это неправда, GROUP_CONCAT() - связанная с mysql функция, в SQL Server это рекурсивный CTE (например). – Pred