MySQL中的链接表条件

时间:2018-07-16 04:01:55

标签: 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 |
|------------|----------------|
| 101        | no             |
| 102        | in-house       |
| 103        | in-house       |
| 104        | no             |
| 105        | in-house       |
|------------|----------------|

我在这里放了一个SQLFidde: http://sqlfiddle.com/#!9/3bb474


我最后一次尝试是这样:

SELECT 
    ROO_Number, 
    IF(BOO_DateCI >= '2018-07-16' AND BOO_DateCO <= '2018-07-16', 'in-house', 'no')
        AS BOO_LiveStatus
FROM ___Rooms
INNER JOIN ___Bookings
    ON ___Rooms.ROO_id = ___Bookings.BOO_RoomId

1 个答案:

答案 0 :(得分:1)

您似乎将<>条件放在错误的位置。另外,您需要使用LEFT JOIN而不是INNER JOIN。请查看下面的更正查询:

SELECT 
    ROO_Number, 
    IF(BOO_DateCI <= '2018-07-16' AND BOO_DateCO >= '2018-07-16', 'in-house', 'no')
        AS BOO_LiveStatus
FROM ___Rooms
LEFT JOIN ___Bookings
    ON ___Rooms.ROO_id = ___Bookings.BOO_RoomId
ORDER BY 
  ROO_Number

SQL FIDDLE DEMO