mysql - MySQL 查询后的重复行
问题描述
我有 2 张桌子:
___房间
|--------|------------|
| ROO_Id | ROO_Number |
|--------|------------|
| 1 | 101 |
| 2 | 102 |
| 3 | 103 |
| 4 | 104 |
| 5 | 105 |
|--------|------------|
___预订
|--------|------------|------------|------------|-------------------|
| BOO_Id | BOO_RoomId | BOO_DateCI | BOO_DateCO | BOO_ArrivalStatus |
|--------|------------|------------|------------|-------------------|
| 1 | 1 | 2018-07-03 | 2018-07-05 | checkout |
| 2 | 2 | 2018-07-16 | 2018-07-17 | checkin |
| 3 | 3 | 2018-07-14 | 2018-07-16 | none |
| 4 | 5 | 2018-07-14 | 2018-07-18 | checkin |
|--------|------------|------------|------------|-------------------|
我的目标是获得以下报告:
报告日期是今天:
2018-07-16
。
|------------|----------------|-------------------|
| ROO_Number | BOO_LiveStatus | BOO_ArrivalStatus |
|------------|----------------|-------------------|
| 101 | no | checkout |
| 102 | in-house | checkin |
| 103 | in-house | none |
| 104 | no | 0 |
| 105 | in-house | checkin |
|------------|----------------|-------------------|
我在这里放了一个 SQLFidde: http ://sqlfiddle.com/#!9/854079/5
实际上,我很接近,但我有一个小问题。
在我的报告中,我需要 ___Rooms 表中每个房间的一行。但实际上,我有更多行(#102 为 2)。
(1, 2, '2018-07-13', '2018-07-15', 'checkout')
不应显示,因为今天的日期不在 2018-07-13 和 2018-07-15 之间。
我最后一次尝试是这个:
SELECT
ROO_Number,
IF(BOO_DateCI <= '2018-07-16' AND BOO_DateCO >= '2018-07-16', 'in-house', 'no')
AS BOO_LiveStatus,
IFNULL(BOO_ArrivalStatus, '0')
AS BOO_ArrivalStatus
FROM ___Rooms
LEFT JOIN ___Bookings
ON ___Rooms.ROO_id = ___Bookings.BOO_RoomId
ORDER BY ROO_Number
你能帮帮我吗?
非常感谢。
解决方案
将日期检查添加到ON
子句。
SELECT
ROO_Number,
IF(BOO_DateCI <= '2018-07-16' AND BOO_DateCO >= '2018-07-16', 'in-house', 'no')
AS BOO_LiveStatus,
IFNULL(BOO_ArrivalStatus, '0')
AS BOO_ArrivalStatus
FROM ___Rooms
LEFT JOIN ___Bookings
ON ___Rooms.ROO_id = ___Bookings.BOO_RoomId
AND CURDATE() BETWEEN ___Bookings.BOO_DateCI AND ___Bookings.BOO_DateCO
ORDER BY
ROO_Number
您需要这样做,ON
而不是WHERE
因为将其放入WHERE
将过滤掉所有没有预订的房间(因为列将是NULL
)。
推荐阅读
- c# - 错误 MSB3174:使用 %2a 的自动递增版本的“AssemblyVersion”值无效
- reactjs - 反应条件使用效果
- multithreading - 在我的并发队列代码中出现 SIGSEGV 错误
- cut - SAC 将每日数据缩减为每小时数据
- consul - 服务器还活着,但客户端没有!“没有安装的密钥可以解密消息”,如何在领事上解决这个问题?
- c# - 不涉及刚体时检查速度
- google-app-engine - 我们如何使用与公共互联网隔离的内部通信来实现应用引擎服务来服务通信?
- php - Laravel LdapRecord - 针对数据库而不是 Active Directory 进行身份验证
- node.js - Z_DATA_ERROR,ERRNO -3,zlib:数据检查不正确,MBA M1
- reactjs - 我可以获取 .ts (TypeScript) 文件的 API 吗?