如何解决“之间”和“X1 <= Y <= X2”之间的区别
SELECT a.*,b.*
FROM df_1 AS a
LEFT JOIN df_2 AS b
ON a.id = b.id
AND a.datadate between b.sdate and b.edate;
SELECT a.*,b.*
FROM df_1 AS a
LEFT JOIN df_2 AS b
ON a.id = b.id
AND b.sdate <= a.datadate <= b.edate;
后一条语句没有给我想要的输出。 IE。存在 a.datadate 不在 b.sdate 和 e.edate 之间的行。前一条语句确实给了我想要的输出。
从概念上讲,我会认为这两个语句彼此相等。显然,我错了。有什么区别?谢谢。
解决方法
这不是有效的 SQL:
AND b.sdate <= a.datadate <= b.edate
原因是解析为:
AND (b.sdate <= a.datadate) <= b.edate
布尔表达式并不适合 <=
。一些数据库(嗯,MySQL)会隐式地将布尔值转换为数字。然后将这些数字隐式转换回日期。因此,在这些情况下,将与 0
和 1
对应的任何日期值进行比较。
所以,总结一下,这在大多数数据库中都是一个语法错误。并且可能会在支持语法的情况下产生难以理解的结果。
我应该注意到,可能有一些 SQL 系统确实支持这种语法。例如,我认为 SAS proc SQL 可以。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。