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))

然后“合并”两个查询