Scala Slick 3 - 如何在 joinLeft 上获得不匹配的结果?
Scala Slick 3 - How to get non-matching results on joinLeft?
我想加入两个 table 并从第一个 table 中获取在第二个 table 中没有匹配行的行某栏
例如:
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,而不是检查连接的结果。我做错了什么?
也许您需要完全外部联接,然后过滤第二个 table 条目为 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))
然后“合并”两个查询
我想加入两个 table 并从第一个 table 中获取在第二个 table 中没有匹配行的行某栏
例如:
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,而不是检查连接的结果。我做错了什么?
也许您需要完全外部联接,然后过滤第二个 table 条目为 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))
然后“合并”两个查询