我必须获取基于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 - 数据库查询:[联合]/[或where子句中的条件],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36256935/

10-13 06:11
查看更多