有的软件不支持left join 语句on 条件中有不等式操作(zepplin中支持,但是metabase中不支持)。
解决办法(需要验证条件在on中的结果和在where中的结果是否一致):
1、把不相等条件拿到where语句中
2、如果第一中方法不适用,可以在select字段中判断
本人使用了第一种方法,发现所得出的结果是有差异的.
-- 代码一
select a.*, b.flag, b.date from test_a a
left join
(select flag, date from test_b b) on a.flag=b.flag and a.date<y.date
发现和
-- 代码二
select a.*, b.flag, b.date from test_a a
left join
(select flag, date from test_b b) on a.flag=b.flag where a.date<y.date
代码一和代码二结果不一致, 代码一的结果数包含了代码二的结果,当y.date为null的时候,代码二并没有选择出来,于是加了判断选择left join 右边变为空的条件
-- 代码三
select a.*, b.flag, b.date from test_a a
left join
(select flag, date from test_b b) on a.flag=b.flag where a.date<y.date or y.date is null or y.date='null' or y.date=''
我以为这下结果终于能和代码一的一样了,结果发现还是不一样,于是放弃了这种方法,采用别的方法进行解决。
详细的关于left join 需要注意的细节可以查看https://developer.aliyun.com/article/718897
参考文章:https://zhuanlan.zhihu.com/p/85856388