【问题标题】:SQLite return multiple rows in a single oneSQLite 在一行中返回多行
【发布时间】:2019-11-28 11:39:05
【问题描述】:

我对 SQL 很陌生,基本上我有两个表 messages 和 messagesData:

消息

_id    message      sender    conversationId

 1     "text"       'user1'     111111
 2     "otherText"  'user2'     111111
 3     "bla"        'user3'     111111

消息数据

messageId   user     read           received

1           'user1'  1574939944809  1574939944809
1           'user2'  1574939944809  1574939944809
1           'user3'  1574940002929  1574940002929
2           'user1'  1574940002929  1574940002929
2           'user2'  false          1574940002929
2           'user3'  false          1574940002929
3           'user1'  1574940097707  1574940097707
3           'user2'  false          1574940097707
3           'user3'  false          1574940097707

我需要进行一个查询,在一行中返回消息中的所有数据,并使用相同的 messageId“聚合”messagesData 中的数据,如下所示:

_id    message   sender   conversationId    user                     read                                         received
1      "text"    'user1'   111111            'user1','user2','user3'  1574939944809,1574939944809,1574940002929     1574939944809,1574939944809,1574940002929

我尝试使用来自 question 的解决方案,但正如您在我的例子中看到的那样,我想要聚合的数据超过 2 个(messagesData 的数量是每条消息的变量)

【问题讨论】:

标签: sql sqlite


【解决方案1】:

您可以聚合并使用 group_concat() 将 messagesdata 中的值作为逗号分隔列表返回:

select m._id, m.message, m.sender, m.conversationId,
  group_concat(d.user) user,
  group_concat(d.read) read,
  group_concat(d.received) received
from messages m left join messagesdata d
on d.messageid = m._id
where m._id = 1
group by m._id, m.message, m.sender, m.conversationId

请参阅demo
结果:

| _id | message   | sender | conversationId | user              | read                                      | received                                  |
| --- | --------- | ------ | -------------- | ----------------- | ----------------------------------------- | ----------------------------------------- |
| 1   | text      | user1  | 111111         | user1,user2,user3 | 1574939944809,1574939944809,1574940002929 | 1574939944809,1574939944809,1574940002929 |

【讨论】:

    猜你喜欢
    • 2011-08-27
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 2015-08-28
    • 2018-06-16
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    相关资源
    最近更新 更多