如何解决Spark:相当于不在
我在Spark SQL中有一个where子句,由于某种原因它不返回任何记录。我认为它不起作用,所以我想问一下这等同于什么?
SELECT
c.client_id,current_date() as insert_date
FROM
CLIENT_SUB c
WHERE
(c.client_id,insert_date) not in (SELECT client_id,insert_date from CLIENT_SUBSCRIBER_CONTRACT)
我听说我可以加入联接
解决方法
我建议使用not exists
:它是null
安全的,而not it
不是-而且通常也可以扩展。
我对insert_date
的提及也很怀疑:您是真的意思还是真的想要current_date()
?
select cs.client_id,current_date() as insert_date
from client_sub cs
where not exists (
select 1
from client_subscriber_contract csc
where
csc.client_id = c.client_id
and csc.insert_date = cs.insert_date
-- or,maybe: csc.insert_date = current_date()
)
为提高性能,请考虑在client_subscriber_contract(client_id,insert_date)
上建立索引。
我怀疑子查询的输出中包含空值,因为not in
与包含空值的值匹配时不输出任何内容。试试
not in (select client_id,insert_date
from CLIENT_SUBSCRIBER_CONTRACT
where coalesce(client_id,insert_date) is not null)
尽管如此,我还是建议您根据自己的意愿调查not exists
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。