質問

I've got the following code:

SELECT 
ROOM_DESCRIPTION_DESC AS "DESCRIPTION",
COUNT(ROOM_DESCRIPTION_ID) AS "AMOUNT"
FROM ROOM_TAB
JOIN ROOM_DESCRIPTION_TAB ON ROOM_DESCRIPTION = ROOM_DESCRIPTION_ID
JOIN RESERVATION_TAB ON RESERVATION_ROOM = ROOM_ID
WHERE RESERVATION_FROM NOT BETWEEN '2014-02-10' AND '2014-02-11'
GROUP BY  ROOM_DESCRIPTION_DESC;

I basically want to find which rooms are not reserved between specific dates The problem is, that when there is no record in RESERVATION_TAB, the room is not even taken into consideration

ie.:

ROOM_TAB:

| ROOM_ID | ROOM_PRICE | ROOM_DESCRIPTION |
     1          200             1
     2          250             1

ROOM_DESCRIPTION_TAB:

| ROOM_DESCRIPTION_ID | ROOM_DESCRIPTION_DESC |
      1                     single room

RESERVATION_TAB:

| RESERVATION_ID | RESERVATION_FROM | RESERVATION_TO | RESERVATION_ROOM |
        1              2014-02-14       2014-02-16            1

using the code I provided gives output:

| DESCRIPTION | AMOUNT |
  single room     1

and this is the room with id 1, the second room seems not to exist

役に立ちましたか?

解決 2

You need a left join to try and find rooms without an applicable reservation record.

SELECT 
ROOM_DESCRIPTION_DESC AS "DESCRIPTION",
COUNT(ROOM_DESCRIPTION_ID) AS "AMOUNT"
FROM ROOM_TAB
JOIN ROOM_DESCRIPTION_TAB ON ROOM_DESCRIPTION = ROOM_DESCRIPTION_ID
LEFT JOIN RESERVATION_TAB ON RESERVATION_ROOM = ROOM_ID
    AND RESERVATION_FROM NOT BETWEEN '2014-02-10' AND '2014-02-11'
WHERE RESERVATION_ID IS NULL
GROUP BY  ROOM_DESCRIPTION_DESC

他のヒント

You need a LEFT JOIN to the RESERVATION_TAB table, so it will include ALL Rows from ROOM_TAB and the ones that are not in RESERVATION_TAB will have Null for the RESERVATION_FROM date column.

SELECT 
ROOM_DESCRIPTION_DESC AS "DESCRIPTION",
COUNT(ROOM_DESCRIPTION_ID) AS "AMOUNT"
FROM ROOM_TAB
JOIN ROOM_DESCRIPTION_TAB ON ROOM_DESCRIPTION = ROOM_DESCRIPTION_ID
LEFT JOIN RESERVATION_TAB ON RESERVATION_ROOM = ROOM_ID
WHERE RESERVATION_FROM NOT BETWEEN '2014-02-10' AND '2014-02-11'
GROUP BY  ROOM_DESCRIPTION_DESC;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top