我运行以下查询:
create table c.hello as
select a.*, b.timestamp, b.alert
from nice a
left join bye b
on a.number = b.number_nb
where (Unix_Timestamp(a.time) - Unix_Timestamp(b.timestamp) >= 0)
and (Unix_Timestamp(a.time) - Unix_Timestamp(b.timestamp) <= 86400)
or b.alert_timestamp is null;
为什么我的hello表返回的记录比nice表少?如何解决此问题,我希望保留表nice中的所有记录。我以为where子句中的or语句可以处理这个问题,但不知道为什么不能。我知道where子句将查询转换为内部连接,但是我认为where子句with is null应该可以解决这个问题。你能帮忙吗?
3条答案
按热度按时间kyks70gy1#
您可以通过将相关条件移到
ON
条款:代码失败的原因是
a
在中有匹配的行b
这两个条件都不满足。因此,这两个时间限制没有得到满足。价值不是null
因为有匹配的行。lqfhib0f2#
有一些最小的可复制的例子总是有帮助的。让我们考虑以下示例:
退货:
现在如果你加上where子句
甚至这个:
结果是:
过滤掉第二行,因为不满足(0和86400之间的ts_差异)。
如果你真的想要这个结果:
然后删除where条件,改用用例语句:
6rvt4ljy3#
因为你在
WHERE
子句,这就是筛选出行。将该条件作为
JOIN
predicate ,如:你看到区别了吗?