繁体   English   中英

将两个MYSQL SELECT语句合并/合并为一个

[英]Combine/Merge two MYSQL SELECT statements into one

我正在使用单个SELECT语句寻求帮助。 使用两个语句的示例:

第一:从现在起40天到现在的365天

第二:立即使用40天

等于所有365天,从现在起40天

选择语句1:

SELECT id FROM sales
 WHERE (saledate BETWEEN DATE_ADD(NOW(), INTERVAL 40 DAY) AND DATE_ADD(NOW(), INTERVAL 365 DAY))
 ORDER BY saledate;

选择语句2:

SELECT id FROM sales
 WHERE (saledate BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 40 DAY))
 ORDER BY saledate;

您是否正在尝试使用UNION获得组合结果,例如

(SELECT id FROM sales 
WHERE (saledate BETWEEN DATE_ADD(NOW(), INTERVAL 40 DAY) 
AND DATE_ADD(NOW(), INTERVAL 365 DAY)) 
ORDER BY saledate)

UNION

(SELECT id FROM sales 
WHERE (saledate BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 40 DAY)) 
ORDER BY saledate)

为什么不只是使用or

SELECT id
FROM sales
WHERE (saledate BETWEEN DATE_ADD(NOW(), INTERVAL 40 DAY) AND DATE_ADD(NOW(), INTERVAL 365 DAY)) OR
       (saledate BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 40 DAY))
ORDER BY saledate;

当然,这可以进一步简化:

SELECT id
FROM sales
WHERE saledate BETWEEN (NOW() AND DATE_ADD(NOW(), INTERVAL 365 DAY)
ORDER BY saledate;

但是,这似乎很明显,我可能会丢失一些东西。

编辑:

如果这是一个订购问题,那么就不可能 union all合并。 联合不保证结果的顺序。 相反,只需执行以下操作:

SELECT id
FROM sales
WHERE saledate BETWEEN (NOW() AND DATE_ADD(NOW(), INTERVAL 365 DAY)
ORDER BY (saledate >= DATE_ADD(NOW(), INTERVAL 40 DAY) ) DESC,
         saledate;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM