使用GROUP_CONCAT()函数的SQL查询

时间:2015-10-14 09:25:26

标签: sql sqlite rdbms

我有两张桌子:

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|

您可以看到结果中缺少另一行。

2 个答案:

答案 0 :(得分:1)

试试这个:

ip address

注意:1。我假设帖子在父

中总是有空值

答案 1 :(得分:0)

您不需要子查询。您只需要两个连接即可获取原始名称和喜欢的名称的值:

select a.parentid, u.name, group_concat(ul.name separator ', ') as likedby
from activity a join
     user ul
     on a.postedby = ul.userid join
     user u
     on a.parentid = u.userid
where a.type = 'like'
group by a.parentid, u.name;