簡體   English   中英

MySQL:在聯合表的子查詢上添加條件

[英]MySQL: Add a condition on a subquery from a joint table

獲取該“用戶”所屬的所有房間,並列出每個房間的詳細信息,包括其

  • idroomId
  • 名稱roomName
  • 此會議室的總活躍用戶activeUsers
  • 房間中包含的總用戶數totalUsers

提供以下表格結構:

Table:users
+---------+-------------------------+
| id(int) |  active(bool/tiny int)  |
+---------+-------------------------+

Table:rooms
+---------+----------------------+
| id(int) |  name(varchar(255))  |
+---------+----------------------+

Table:room_members
+-------------+---------------+
| userId(int) |  roomId(int)  |
+-------------+---------------+

到目前為止,我對SQL有點迷茫:

SELECT
    rooms.id,
    rooms.name,
    (SELECT SUM(users.active) FROM users WHERE room_members.roomId = rooms.id) activeUsers,
    (SELECT COUNT(users.id) FROM users WHERE room_members.roomId = rooms.id) totalUsers
FROM room_members
INNER JOIN rooms
ON room_members.roomId = rooms.id
INNER JOIN users
ON room_members.userId = users.id
WHERE room_members.userId = 1

根據這些數據:

樣本用戶數據

我可以得出結論,我得到了錯誤的結果。

捕獲mysql查詢

我想我需要你們的幫助。

您可以使用帶有分組依據的動態表(以及用戶和room_members之間的聯接)

SELECT
  rooms.id,
  rooms.name,
  t1.activeUsers,
  t1.totalUsers
FROM room_members 
INNER JOIN rooms  ON room_members.roomId = rooms.id
INNER JOIN users  ON room_members.userId = users.id
INNER JOIN  (  
                SELECT roomId, SUM(users.active)  as activeUsers, COUNT(users.id) as totalUsers
                FROM users 
                INNER JOIN room_members on users.id = room_members.userId
                group by roomId
            ) t1 on t1.roomID = rooms.id
WHERE room_members.userId = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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