[英]Select multiple rows from different tables
我在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
但是 我 需要 所有 帶 消息 或 不 帶 消息 的 用戶標識 '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';
考慮使用LEFT Join
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 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'
應用左聯接。
嘗試這個
從GroupsMembers AS mmbr LEFT JOIN
選擇mmbr.group_id,grp.group_name,grp.group_image,msg.time,msg.message消息GroupsMembers AS mmbr LEFT JOIN
消息AS msg ON msg.group_id =mmbr.group_id AND msg.time = (SELECT MAX(time) FROM
消息中AS msg ON msg.group_id =mmbr.group_id AND msg.time = (SELECT MAX(time) FROM
WHERE group_id = mmbr.group_id) LEFT JOIN
Groups` AS grp ON grp.group_id = mmbr.group_id WHERE mmbr.user_id ='002'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.