使用MySQL从两个表的一个查询中进行SELECT和COUNT

时间:2018-08-30 11:44:28

标签: mysql

这是我的表格结构:

___房间

|--------|-------------|------------|
| 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 |
|-----------|------------|

3 个答案:

答案 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构造来捕获与主表的零交叉。