Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL根据一个表中记录的总和或另一个表中没有记录来查询一个表_Mysql_Select_Join_Left Join - Fatal编程技术网

MySQL根据一个表中记录的总和或另一个表中没有记录来查询一个表

MySQL根据一个表中记录的总和或另一个表中没有记录来查询一个表,mysql,select,join,left-join,Mysql,Select,Join,Left Join,我很难从一个位置表中选择记录,例如根据存储在单独表中的可用性选择酒店。为了避免每个可能的日期/地点组合都有大量可用性记录,可用性表只保存给定日期的有限可用性或无可用性的记录,因此缺少匹配记录意味着完全可用 这些桌子有点像 位置:id、名称、maxRooms等 可用性:locationID、date、roomsAvailable从零开始的整数表示maxRooms没有可用性 …我需要做的是选择在给定日期段内具有一定可用性的所有地点。这意味着他们要么没有匹配的可用性记录,即完全可用,要么匹配可用性的总

我很难从一个位置表中选择记录,例如根据存储在单独表中的可用性选择酒店。为了避免每个可能的日期/地点组合都有大量可用性记录,可用性表只保存给定日期的有限可用性或无可用性的记录,因此缺少匹配记录意味着完全可用

这些桌子有点像

位置:id、名称、maxRooms等

可用性:locationID、date、roomsAvailable从零开始的整数表示maxRooms没有可用性

…我需要做的是选择在给定日期段内具有一定可用性的所有地点。这意味着他们要么没有匹配的可用性记录,即完全可用,要么匹配可用性的总和。roomsAvailable记录大于零


我很头痛,只是想解释一下:-感谢收到的任何想法…

您需要使用一个我想您可以这样查询,获取特定日期可用房间总数大于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)

谢谢大家的建议。在考虑了它们之后,我提出了这个结合了PHP/MySQL的解决方案——它只适用于MySQL 4或更高版本

从位置中选择* WHERE locations.id不在 选择distinct availability.locationID 从可用性 其中availability.date>=“$periodStartYMD”
我相信,如果您向我们展示一些包含原始数据和预期结果的表格,您将更轻松地陈述问题并很可能得到答案。
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)