添加语句WHEN CASE SQL

时间:2018-02-06 09:24:01

标签: mysql sql

我有这样的表: enter image description here

这是我显示房间可用性的查询

SELECT 
hotel.nama_hotel,
hotel.kota,
room.id_room,
room.position,
room.price,
room_price.date_start,
room_price.date_end,
room_price.price
FROM room
    JOIN hotel on room.id_hotel = hotel.id_hotel
    JOIN room_price on room.id_room = room_price.id_room
    WHERE 
        (
            room.id_room NOT IN 
            (
            SELECT id_room FROM booking 
                WHERE 
                (
                    booking_start BETWEEN '2018-02-10' AND '2018-02-11' OR 
                    booking_end   BETWEEN '2018-02-10' AND '2018-02-11' OR 
                    '2018-02-10'  BETWEEN booking_start AND booking_end OR
                    '2018-02-11'  BETWEEN booking_start AND booking_end
                ) 
            )
        )
    AND (room.status = 1) 
    AND (hotel.kota="Bandung")
    AND (room.position = "earth")

我从表格room和表格room_price

获得了两列价格

当插入日期介于room_price.date_startroom_price.date_end之间时我需要1列价格,价格会从表格room_price中显示 当room_price.date_startroom_price.date_end之间没有显示价格时,价格会从表格room中显示

可以这样做吗?

修改

这个查询

SELECT 
hotel.nama_hotel,
hotel.kota,
room.id_room,
room.position,
room_price.date_start,
room_price.date_end,
    (
        CASE WHEN 
        (
            '2018-02-10' BETWEEN room_price.date_start AND room_price.date_end
        )THEN  
        room.price = room_price.price
        ELSE room.price = room.price END
    ) as price from room 



   JOIN hotel on room.id_hotel = hotel.id_hotel
    JOIN room_price on room.id_room = room_price.id_room
    WHERE 
        (
            room.id_room NOT IN 
            (
            SELECT id_room FROM booking 
                WHERE 
                (
                    booking_start BETWEEN '2018-02-10' AND '2018-02-11' OR 
                    booking_end   BETWEEN '2018-02-10' AND '2018-02-11' OR 
                    '2018-02-10'  BETWEEN booking_start AND booking_end OR
                    '2018-02-11'  BETWEEN booking_start AND booking_end
                ) 
            )
        )
    AND (room.status = 1) 
    AND (hotel.kota="Bandung")
    AND (room.position = "earth")

但我得不到price = room_price.price

2 个答案:

答案 0 :(得分:2)

,之后的第9行之后错过room.price,当您打开括号(时,SQL认为您正在调用函数room.price()

答案 1 :(得分:1)

在SELECT中使用IF(IF)可以节省您的时间。

=QUERY(
'Form Responses 1'!$1:$1000,
" select A:G where C contains 'Sheet2'!$A1:$A26"
)

我不确定你是否需要room.id_room NOT IN(...)或不是,

hotel.nama_hotel,
hotel.kota,
room.id_room,
room.position,
room_price.date_start,
room_price.date_end,
IF('2018-02-10' BETWEEN room_price.date_start AND room_price.date_end, room_price.price, room.price)
FROM room
INNER JOIN hotel ON room.id_hotel = hotel.id_hotel
INNER JOIN room_price ON room.id_room = room_price.id_room
WHERE 
    room.id_room NOT IN( 
    SELECT id_room 
    FROM booking 
    WHERE 
        booking_start BETWEEN '2018-02-10' AND '2018-02-11' OR 
        booking_end   BETWEEN '2018-02-10' AND '2018-02-11' OR 
        '2018-02-10'  BETWEEN booking_start AND booking_end OR
        '2018-02-11'  BETWEEN booking_start AND booking_end

                    )
AND (room.status = 1) 
AND (hotel.kota="Bandung")
AND (room.position = "earth")

将检查日期,如果是真的,那么将从room_price.price返回价格,如果是false,那么它将返回room.price。

更多关于它

https://dev.mysql.com/doc/refman/5.6/en/control-flow-functions.html