Union all,合并查询结果
Union all, combining query results
我有以下 MySQL 个查询:
SELECT *
FROM bookings
WHERE record_id = 7 AND status = 'available' AND startdate >= '2015-05-02' AND startdate <= '2015-05-09'
UNION ALL
SELECT *
FROM bookings
WHERE record_id = 7 AND status = 'available' AND startdate >= '2015-05-11' AND startdate <= '2015-05-12'
是否可以合并这两个查询,而不是使用 UNION ALL
?
离开这部分:
SELECT * FROM bookings WHERE record_id = 7 AND status = 'available'
添加这个:
AND ((startdate >= '2015-05-02' AND startdate <= '2015-05-09') OR (startdate >= '2015-05-11' AND startdate <= '2015-05-12'))
如果第一个和条件或第二个和条件
为真,则条件将return为真
此外,对于您正在使用的那些和条件,您可能想看看 sql BETWEEN 语句:http://www.w3schools.com/sql/sql_between.asp
您也可以在完成第一部分后执行此操作:
AND startDate >= '2015-05-02' AND startDate <= '2015-05-12' AND NOT startDate = '2015-05-10'
因为无论如何您都在使用硬编码日期,并且该范围内您唯一不需要的日期是 5 月 10 日
您可以使用 OR
运算符代替
SELECT *
FROM bookings
WHERE record_id = 7
AND status = 'available'
AND ((startdate >= '2015-05-11' AND startdate <= '2015-05-12') or (startdate >= '2015-05-02' AND startdate <= '2015-05-09'))
这应该有效:
SELECT *
FROM bookings
WHERE record_id = 7 AND status = 'available' AND
((startdate >= '2015-05-02' AND startdate <= '2015-05-09') or (startdate >= '2015-05-11' AND startdate <= '2015-05-12'))
您可以只使用 OR
运算符来获取两个日期范围:
SELECT *
FROM bookings
WHERE record_id = 7 AND
status = 'available' AND
((startdate >= '2015-05-02' AND startdate <= '2015-05-09') OR
(startdate >= '2015-05-11' AND startdate <= '2015-05-12'))
我有以下 MySQL 个查询:
SELECT *
FROM bookings
WHERE record_id = 7 AND status = 'available' AND startdate >= '2015-05-02' AND startdate <= '2015-05-09'
UNION ALL
SELECT *
FROM bookings
WHERE record_id = 7 AND status = 'available' AND startdate >= '2015-05-11' AND startdate <= '2015-05-12'
是否可以合并这两个查询,而不是使用 UNION ALL
?
离开这部分:
SELECT * FROM bookings WHERE record_id = 7 AND status = 'available'
添加这个:
AND ((startdate >= '2015-05-02' AND startdate <= '2015-05-09') OR (startdate >= '2015-05-11' AND startdate <= '2015-05-12'))
如果第一个和条件或第二个和条件
为真,则条件将return为真此外,对于您正在使用的那些和条件,您可能想看看 sql BETWEEN 语句:http://www.w3schools.com/sql/sql_between.asp
您也可以在完成第一部分后执行此操作:
AND startDate >= '2015-05-02' AND startDate <= '2015-05-12' AND NOT startDate = '2015-05-10'
因为无论如何您都在使用硬编码日期,并且该范围内您唯一不需要的日期是 5 月 10 日
您可以使用 OR
运算符代替
SELECT *
FROM bookings
WHERE record_id = 7
AND status = 'available'
AND ((startdate >= '2015-05-11' AND startdate <= '2015-05-12') or (startdate >= '2015-05-02' AND startdate <= '2015-05-09'))
这应该有效:
SELECT *
FROM bookings
WHERE record_id = 7 AND status = 'available' AND
((startdate >= '2015-05-02' AND startdate <= '2015-05-09') or (startdate >= '2015-05-11' AND startdate <= '2015-05-12'))
您可以只使用 OR
运算符来获取两个日期范围:
SELECT *
FROM bookings
WHERE record_id = 7 AND
status = 'available' AND
((startdate >= '2015-05-02' AND startdate <= '2015-05-09') OR
(startdate >= '2015-05-11' AND startdate <= '2015-05-12'))