gpt4 book ai didi

mysql - 从不同的表中选择多行

转载 作者:行者123 更新时间:2023-11-30 23:54:28 26 4
gpt4 key购买 nike

我在 mysql 数据库中有 3 个表。喜欢群组、群组成员、消息。

群组

| group_id |  group_name  | group_image
-------------------------------------------
| group_1 | First Group | group1.jpg
| group_2 | 2nd Group | group2.jpg
| group_3 | 3rd Group | group3.jpg
| group_4 | 4th Group | group4.jpg
| group_5 | 5th Group | group5.jpg
| group_6 | 6th Group | group6.jpg

消息

| sender_id |  group_id  | message | time 
-----------------------------------------
| 001 | group_1 | first message | 2017-07-13 15:05:07
| 002 | group_2 | fifth message | 2017-07-13 15:04:07
| 002 | group_2 | third Message | 2017-07-13 15:03:07

群组成员

| user_id |  group_id 
-----------------------------------------
| 001 | group_1
| 001 | group_2
| 002 | group_2
| 002 | group_1
| 002 | group_4
| 002 | group_6

我正在尝试这个查询

SELECT mmbr.group_id, grp.group_name, grp.group_image, msg.time, msg.message FROM `GroupsMembers` AS mmbr JOIN `Messages` AS msg ON msg.group_id =mmbr.group_id AND msg.time = (SELECT MAX(time) FROM `Messages` WHERE group_id = mmbr.group_id) JOIN `Groups` AS grp ON grp.group_id = mmbr.group_id WHERE mmbr.user_id = '002'

它给了我以下结果:-

| group_id |  group_name    | group_image | time                | message |
------------------------------------------------------------------------
| group_1 | First Group | group1.jpg | 2017-07-13 15:05:07 | first message
| group_2 | 2nd Group | group2.jpg | 2017-07-13 15:04:07 | fifth message

但是 需要 所有 userid '002' 消息 没有东西 这个:-
需要 最后 已发送 消息 如果 任何

| group_id   |  group_name  | group_image | time                | message |
------------------------------------------------------------------------
| group_1 | First Group | group1.jpg | 2017-07-13 15:05:07 | first message
| group_2 | 2nd Group | group2.jpg | 2017-07-13 15:04:07 | fifth message
| group_4 | 4th Group | group4.jpg | null | null
| group_6 | 6th Group | group6.jpg | null | null

最佳答案

尝试左外连接:

SELECT mmbr.group_id,
grp.group_name,
grp.group_image,
msg.time,
msg.message
FROM `GroupsMembers` AS mmbr
JOIN `Groups` AS grp
ON grp.group_id = mmbr.group_id
LEFT OUTER JOIN `Messages` AS msg
ON msg.group_id = mmbr.group_id
AND msg.time = (SELECT MAX(time)
FROM `Messages`
WHERE group_id = mmbr.group_id)
WHERE mmbr.user_id = '002';

关于mysql - 从不同的表中选择多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45163681/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com