这是我的表格结构:
___房间
|--------|-------------|
| ROO_Id | ROO_HotelId |
|--------|-------------|
| 1 | ABC123 |
| 2 | ABC123 |
| 3 | ABC123 |
|--------|-------------|
___订阅
|-------------|-----------|
| SUB_HotelId | SUB_Limit |
|-------------|-----------|
| ABC123 | 19 |
| XYZ987 | 23 |
|-------------|-----------|
当___Rooms
具有所需的HotelId
的行时,此查询有效。
SELECT
COUNT(ROO_Id) AS SUB_RoomNumber,
SUB_Limit
FROM ___Subscriptions
LEFT JOIN ___Rooms
ON ___Rooms.ROO_HotelId = ___Subscriptions.SUB_HotelId
WHERE SUB_HotelId = 'ABC123'
AND ROO_HotelId = 'ABC123'
|----------------|-----------|
| SUB_RoomNumber | SUB_Limit |
|----------------|-----------|
| 3 | 19 |
|----------------|-----------|
对于旅馆XYZ987
,该旅馆实际上在___Rooms
中没有房间,并且查询返回SUB_Limit
的我为NULL:
|----------------|-----------|
| SUB_RoomNumber | SUB_Limit |
|----------------|-----------|
| 0 | NULL |
|----------------|-----------|
为什么请?
答案 0 :(得分:0)
请勿在位置条件内检查ROO_HotelId = 'XYZ987'
。如果ROO_HotelId
表中没有匹配的__Rooms
,则不会显示任何数据(如果使用Where)。
基本上,一旦完成了在表之间的Join(在HotelId上),则只需要为其中一个表放置Where条件。对于内部联接,可以使用任何一个表。但是,对于左连接,您需要使用左表。
使用以下内容:
SELECT
COUNT(ROO_Id) AS SUB_RoomNumber,
SUB_Limit
FROM ___Subscriptions
LEFT JOIN ___Rooms
ON ___Rooms.ROO_HotelId = ___Subscriptions.SUB_HotelId
WHERE SUB_HotelId = 'XYZ987'