微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Scala Slick 3 - 如何在joinLeft 上获得不匹配的结果?

如何解决Scala Slick 3 - 如何在joinLeft 上获得不匹配的结果?

我想连接两个表,并从第一个表中获取在第二个表中没有匹配行的行,以满足特定列的某些条件

例如:

tableA.joinLeft(tableB)
   .on((a: A,b: B) => a.key === b.key && a.field1 =!= b.field1)
   .filter(_._2.map(_.key).isEmpty)
   .map(_._1)

但这会检查 tableB 中的 key==null 而不是检查连接的结果。我做错了什么?

解决方法

也许您需要一个完整的外连接,然后过滤第二个表条目为 None (NULL) 的结果行。例如:

tableA.fullJoin(tableB)
   .on((a: A,b: B) => /* your join condition here */)
   .filter { case (_,maybeMissing) => maybeMissing.isEmpty }
   .map { case (first,_) => first }
,

我通过将其拆分为 2 个查询找到了一个解决方案: 一个查询是:

tableA.join(tableB)
.on((a: A,b: B) => a.key === b.key)
.filter((a: A,b: B) => a.field1 =!= b.field1)
.map(_._1)

第二个查询是:

tableA.filterNot(_.key in tableB.map(_.key))

然后“联合”两个查询

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。