如何解决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 举报,一经查实,本站将立刻删除。