使用mySQL在一个查询中从两个表中选择并计数
以下是我的表格结构: ___房间使用mySQL在一个查询中从两个表中选择并计数,mysql,Mysql,以下是我的表格结构: ___房间 |--------|-------------|------------| | ROO_Id | ROO_HotelId | ROO_Status | |--------|-------------|------------| | 1 | 1 | active | | 2 | 1 | active | | 3 | 1 | inactive | |----
|--------|-------------|------------|
| 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 |
|-----------|------------|
请尝试以下查询:
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'
您忘记了分组依据
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:
分组依据
是不必要的,因为我们只需要所有行的数量。另外,右连接不能用于您的特定MySQL引擎(与左连接或内部连接不同),因此如果我没有弄错的话,您最好使用联合构造来捕获与主表的零交点。请尝试下面的查询一次
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'
与我的查询相同。它现在不返回任何行。注意:有时,我在
中没有房间。所以,也许JOIN?有问题,您的问题来自其他地方。这很可能是一个错误。