2

次のような構造の 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 は結果に含まれません。

userlist にその部屋のレコードが存在しない場合でも、roomlist からの部屋に関する結果を取得するにはどうすればよいですか?

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 に答える