2

Why is this sql giving tables with minimum field having null. Also when A has no data between the given date ranges, it is providing the table with all rooms having minimum as null

   SELECT `rooms`.*,A.`minimum`
    FROM (
        SELECT `room_id`, min(`available_rooms`) AS `minimum`
        FROM `room_bookings` 
        WHERE `date` BETWEEN '2014-02-01' and '2014-02-10' 
        GROUP BY `room_id`) as A
    INNER JOIN `rooms` on `rooms`.`room_id`=A.`room_id` 
    WHERE `rooms`.`location`='kathmandu' 
    AND `rooms`.`status`=1 
    AND A.`minimum`!=NULL
Saharsh Shah
  • 28,687
  • 8
  • 48
  • 83
Bishal Paudel
  • 1,896
  • 2
  • 21
  • 28
  • 5
    replace `AND A.minimum !=NULL` with `AND A.minimum is not NULL`. null checks need to use the `IS` operator – juergen d Jan 13 '14 at 11:52

4 Answers4

2
 SELECT `rooms`.*,A.`minimum`
    FROM (
        SELECT `room_id`, min(`available_rooms`) AS `minimum`
        FROM `room_bookings` 
        WHERE `date` BETWEEN '2014-02-01' and '2014-02-10' 
        GROUP BY `room_id` having minimum > 0) as A
    INNER JOIN `rooms` on `rooms`.`room_id`=A.`room_id` 
    WHERE `rooms`.`location`='kathmandu' 
    AND `rooms`.`status`=1
2
SELECT `rooms`.*,A.`minimum`
FROM (
    SELECT `room_id`, min(`available_rooms`) AS `minimum`
    FROM `room_bookings` 
    WHERE `date` BETWEEN '2014-02-01' and '2014-02-10' 
    GROUP BY `room_id`) as A
INNER JOIN `rooms` on `rooms`.`room_id`=A.`room_id` 
WHERE `rooms`.`location`='kathmandu' 
AND `rooms`.`status`=1 
AND A.`minimum` is not NULL

This would be the correct syntax ( change != to is not )

Gert B.
  • 2,282
  • 18
  • 21
1

try this with IS NOT NULL

SELECT `rooms`.*,A.`minimum`
    FROM (
        SELECT `room_id`, min(`available_rooms`) AS `minimum`
        FROM `room_bookings` 
        WHERE `date` BETWEEN '2014-02-01' and '2014-02-10' 
        GROUP BY `room_id`) as A
    INNER JOIN `rooms` on `rooms`.`room_id`=A.`room_id` 
    WHERE `rooms`.`location`='kathmandu' 
    AND `rooms`.`status`=1 
    AND A.`minimum` IS NOT NULL
Satish Sharma
  • 9,547
  • 6
  • 29
  • 51
1

Try this:

SELECT r.*, MIN(rb.available_rooms) minimum 
FROM rooms r 
INNER JOIN room_bookings rb ON r.room_id = rb.room_id AND rb.date BETWEEN '2014-02-01' AND '2014-02-10' 
WHERE r.location = 'kathmandu' AND r.status = 1 
GROUP BY r.room_id HAVING minimum IS NOT NULL
Saharsh Shah
  • 28,687
  • 8
  • 48
  • 83