我必须根据 TransDate 和 ValueDate 获取记录
根据以下条件获取记录:
- TransDate 为 2016 年 3 月 20 日或之前,ValueDate 为 2016 年 3 月 20 日
- ValueDate 为 2016 年 3 月 20 日或之前,TransDate 为 2016 年 3 月 20 日
我的同事尝试将 UNION 与以下查询一起使用
select * from Sales where ValueDate < '2016-03-21' and ValueDate >= '2016-03-20'
and TransDate < '2016-03-21'
Union
select * from Sales where TransDate < '2016-03-21' and TransDate >= '2016-03-20'
and ValueDate < '2016-03-21'
但我觉得将该查询重写为以下方式
select * from Sales where ((ValueDate < '2016-03-21' and ValueDate >= '2016-03-20'
and TransDate < '2016-03-21') or (TransDate < '2016-03-21'
and TransDate >= '2016-03-20' and ValueDate < '2016-03-21'))
注意:TransDate 和 ValueDate 都是时间戳数据类型。
请建议这两个查询的区别,否则如果有其他方法最好建议我。
最佳答案
两个查询的结果没有差异。但时间成本可能会有所不同。
我认为第二个会更快。
这是另一种选择:
select * from Sales
where
(DATE(ValueDate) = '2016-03-20' and TransDate < '2016-03-21') or
(DATE(TransDate) = '2016-03-20' and ValueDate < '2016-03-21')
关于mysql - 数据库查询: [Union]/[or condition in where clause],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36256935/