使用mysql在一个查询中从两个表中选择和计数

bkkx9g8r  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(359)

以下是我的表格结构:
___房间

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

r3i60tvu1#

请尝试下面的查询一次

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'
0x6upsns

0x6upsns2#

尝试以下查询:

SELECT s.sub_limit, count(ROO_Id)
FROM ___Rooms r
INNER JOIN ___Subscription s ON (s.SUB_HotelId = r.ROO_HotelId)
WHERE s.SUB_HotelId = 1
and r.ROO_STATUS = 'active'
eqqqjvef

eqqqjvef3#

你忘了 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

升级版本: `group by` 没有必要,因为我们只需要所有行的数目。另外,右连接不能用于特定的mysql引擎(不同于左连接或内部连接),所以最好使用联合构造,如果我没有弄错的话,可以捕获与主表的零交集。

相关问题