2

我有两个表,结构如下:

房间清单

-room (unique)
-totalDesks

用户列表

-room (has duplicates)
-deskOwned

我需要一个 SQL 语句,它会输出以下内容:

room
totalDesks
desksUsed (COUNT(DISTINCT userlist.desk))
desksOpen (totalDesks-(COUNT(DISTINCT userlist.desk)))

到目前为止我有这个:

SELECT 
    DISTINCT roomList.room, userlist.room, roomList.totalDesks, 
    COUNT(DISTINCT userlist.desk) AS desksUsed, 
    roomlist.totalDesks - COUNT(DISTINCT userlist.desk) AS desksOpen     
FROM 
    roomlist, userlist 
WHERE 
    roomlist.room = userlist.room

问题是目前并非所有房间都有用户。如果我有房间 A、B、C 和 D,但只有 A、B 和 C 中的人的记录,则结果中不会包括房间 D——即使房间 D 总共有 5 个桌子,但没有一个被占用。

即使用户列表中没有该房间的记录,我如何才能获得仍然会在房间列表中为我提供房间结果的结果?

4

2 回答 2

2

请尝试使用 LEFT JOIN。我假设您还需要按房间分组:

SELECT DISTINCT 
     roomList.room, 
     userlist.room, 
     roomList.totalDesks, 
     COUNT(DISTINCT userlist.desk) AS desksUsed, 
     roomlist.totalDesks-COUNT(DISTINCT userlist.desk) AS desksOpen 
     FROM roomlist 
         LEFT JOIN userlist ON roomlist.room=userlist.room
     GROUP BY roomList.room, 
         userlist.room, 
         roomList.totalDesks
于 2013-06-14T18:59:44.080 回答
0

我建议在http://sqlfiddle.com/中模拟这个,这样会更容易帮助你

于 2013-06-14T19:01:08.243 回答