这是我的表格结构:
___房间
|--------|-------------|------------|
| ROO_Id | ROO_HotelId | ROO_Status |
|--------|-------------|------------|
| 1 | 1 | active |
| 2 | 1 | active |
| 3 | 1 | inactive |
|--------|-------------|------------|
___订阅
|-------------|-----------|
| SUB_HotelId | SUB_Limit |
|-------------|-----------|
| 1 | 24 |
|-------------|-----------|
我要选择SUB_Limit
并计算房间数量(仅活动房间)。
因此查询应返回如下内容:
|-----------|------------|
| SUB_Limit | ROO_Number |
|-----------|------------|
| 24 | 2 |
|-----------|------------|
为什么这个查询没有返回我想要的输出?
SELECT
SUB_Limit,
COUNT(ROO_Id) AS ROO_Number
FROM ___Rooms
LEFT JOIN ___Subscriptions
ON ___Rooms.ROO_HotelId = ___Subscriptions.SUB_HotelId
WHERE ROO_Status = 'active'
AND SUB_HotelId = 1
AND ROO_HotelId = 1
实际上,它给了我
|-----------|------------|
| SUB_Limit | ROO_Number |
|-----------|------------|
| NULL | 0 |
|-----------|------------|
答案 0 :(得分:1)
在下面的查询中尝试一次
SELECT
SUB_Limit, COUNT(ROO_Id) AS ROO_Number FROM
___rooms r,___subscriptions s
WHERE r.ROO_HotelId=s.SUB_HotelId AND ROO_Status='active'
答案 1 :(得分:0)
请尝试以下查询:
<img src="imagepathhere" />
答案 2 :(得分:0)
您忘记了GROUP BY
SELECT
S.SUB_Limit,
COUNT(*) AS ROO_Number
FROM ___Rooms AS R
RIGHT JOIN ___Subscriptions AS S
ON R.ROO_HotelId = S.SUB_HotelId
WHERE R.ROO_Status = 'active'
AND S.SUB_HotelId = 1
GROUP BY ROO_HotelId
UPD:group by
是不必要的,因为我们只需要所有行的数目。另外, RIGHT JOIN不适用于您的特定MySQL引擎(与LEFT JOIN或INNER JOIN不同),因此,如果我没有记错的话,最好使用UNION构造来捕获与主表的零交叉。