Mysql 联合所有地点日期条款
我的问题Mysql 联合所有地点日期条款,mysql,sql,sql-order-by,union-all,having-clause,Mysql,Sql,Sql Order By,Union All,Having Clause,我的问题 SELECT RoomType, date FROM Superior WHERE (date >= '2012-06-26'AND date < '2012-06-30')AND (Avail > '0') UNION SELECT RoomType, date FROM Deluxe WHERE (date >= '2012-06-26'AND date < '2012-06-30')AND (Avail > '0') UNION SELECT
SELECT RoomType, date FROM Superior WHERE (date >= '2012-06-26'AND date < '2012-06-30')AND (Avail > '0')
UNION
SELECT RoomType, date FROM Deluxe WHERE (date >= '2012-06-26'AND date < '2012-06-30')AND (Avail > '0')
UNION
SELECT RoomType, date FROM SuperDeluxe WHERE (date >= '2012-06-26'AND date < '2012-06-30')AND (Avail > '0')
ORDER BY date
HAVING COUNT(date, INTERVAL 3 DAY)
是的,它是MySQL,我只是想证明自己,我可以帮助我的叔叔完成这项工作。你知道我不是季节性的,只是个初学者。你猜对了,三张桌子都模棱两可。我有另一个现场资料,记录可用房间的数量。预订完成后,它会自动计算可用房间
我当前的查询使用房间类型选项选择,该选项只能为每个查询生成一个房间类型的可用性。在上面,我计划进行1次查询并生成日期范围内可用的任何房间类型。当我使用上面的联合查询时,我遇到的问题是,我得到的结果还包括可用性为=0的范围内的一个日期
我在尝试这样的事情
SELECT RoomType, COUNT( date )
FROM Superior
WHERE date >= '2012-06-26'
AND date < '2012-06-30'
AND Avail > '0'
UNION
SELECT RoomType, COUNT( date )
FROM Deluxe
WHERE date >= '2012-06-26'
AND date < '2012-06-30'
AND Avail > '0'
UNION
SELECT RoomType, COUNT( date )
FROM SuperDeluxe
WHERE date >= '2012-06-26'
AND date < '2012-06-30'
AND Avail > '0'
GROUP BY date
HAVING COUNT( 4 )
看起来我越来越近了。我尝试了MAX date,它给出的日期有4行,但它仍然显示1行可用性大于0的房间类型
我还尝试使用COUNT DISTINCT date=4
结果仍然显示字段日期,其中行数不等于4,并且仅与GROUP BY一起过滤组,但您没有正在使用的组
在每个select中需要一个直接的WHERE子句,以及一个可以订购的包装select:
select * from (
SELECT RoomType, date
FROM Superior
WHERE date >= '2012-06-26'
AND date < '2012-06-30'
AND Avail > 3 -- specify avail range here
UNION
SELECT RoomType, date
FROM Deluxe
WHERE date >= '2012-06-26'
AND date < '2012-06-30'
AND Avail > 3 -- specify avail range here
UNION
SELECT RoomType, date
FROM SuperDeluxe
WHERE date >= '2012-06-26'
AND date < '2012-06-30'
AND Avail > 3 -- specify avail range here
) results
ORDER BY date
我将认真考虑将数据合并到一个表中,并添加一个列来区分三种预订类型,而不是拥有更多的表。它不仅可以使您的查询变得合理,而且当您获得新的预订类型时,您不必再创建另一个表。仅使用GROUP BY筛选组,而不必使用组
在每个select中需要一个直接的WHERE子句,以及一个可以订购的包装select:
select * from (
SELECT RoomType, date
FROM Superior
WHERE date >= '2012-06-26'
AND date < '2012-06-30'
AND Avail > 3 -- specify avail range here
UNION
SELECT RoomType, date
FROM Deluxe
WHERE date >= '2012-06-26'
AND date < '2012-06-30'
AND Avail > 3 -- specify avail range here
UNION
SELECT RoomType, date
FROM SuperDeluxe
WHERE date >= '2012-06-26'
AND date < '2012-06-30'
AND Avail > 3 -- specify avail range here
) results
ORDER BY date
我将认真考虑将数据合并到一个表中,并添加一个列来区分三种预订类型,而不是拥有更多的表。它不仅可以使您的查询变得合理,而且当您获得新的预订类型时,您不必再创建另一个表。您使用的是什么数据库产品?MySQL?而且,这有一种属性分裂的味道——为什么有3个看起来完全相同的表?为什么不在一个表中添加一个列来指定Superior、Deluxe或SuperDeluxe?向我们展示表定义和示例数据。什么是可用性,0或1标志?它是一个描述可用天数的整数吗?由于在3个选择中的每个选择中都有where子句,只需删除HAVING语句即可。您使用的是哪种数据库产品?MySQL?而且,这有一种属性分裂的味道——为什么有3个看起来完全相同的表?为什么不在一个表中添加一个列来指定Superior、Deluxe或SuperDeluxe?向我们展示表定义和示例数据。什么是可用性,0或1标志?它是一个描述可用天数的整数吗?由于在3个选项中都有where子句,只需删除HAVING语句即可。不确定这是否能解决问题,因为规格相当模糊,但似乎方向正确。不过,您不需要将此查询封装在嵌套子查询中。不确定这是否能解决问题,因为规范相当模糊,但似乎方向正确。不过,您不需要将此查询包装在嵌套子查询中。