簡體   English   中英

從不同的表中選擇多行

[英]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' 

閱讀本教程https://www.w3schools.com/sql/sql_join_left.asp

應用左聯接。

嘗試這個

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM