我很难从一个位置表(如酒店)中选择记录,因为它们存储在单独的表中。为了避免在每个可能的日期/地点组合中都有大量的可用性记录,可用性表只在给定的日期保存有限的或没有可用性的记录--因此,缺少匹配的记录意味着完全可用。
桌子有点像..。
地点: id,姓名,maxRooms等。 可用性: locationID,date,roomsAvailable(从零开始的整数表示maxRooms没有可用性)
...and我需要做的是选择所有地点谁-在给定的日期期间-有一些可用性。这意味着它们要么没有匹配的可用性记录(即完全可用),要么它们匹配的availability.roomsAvailable记录的总和大于零。
我有点头疼,只是想解释一下:-(任何感激的想法.
发布于 2011-08-04 15:56:04
SELECT locations.id FROM locations LEFT JOIN availability
ON( locations.id = availability.locationID AND
( availability.roomsAvailable > 0 OR ISNULL( availability.locationID ) ) )发布于 2011-08-04 15:48:08
您需要使用左联接
发布于 2011-08-04 16:04:15
我认为您可以这样查询,得到所有可用房间之和大于0的特定日期,然后得到在可用性中没有列出的所有位置。
SELECT * FROM locations
WHERE id in
(
SELECT locationId
FROM availability
WHERE date >= '2011-05-01' and date <= '2011-07-01'
GROUP by locationId
HAVING SUM(roomsAvailable) > 0
)
OR id not in (SELECT DISTINCT locationId FROM availabilty)https://stackoverflow.com/questions/6944452
复制相似问题