Из того, что вы описали, два последовательных left join
таблицы B в таблице id
должны преобразовываться в нечто похожее на следующее:
val joinQuery = for {
((a, b1), b2) <- tableA joinLeft tableB on ( (x, y) =>
x.id === y.aId && y.condition === "b1" )
joinLeft tableB on ( (x, y) =>
x._1.id = y.aId && y.condition === "b2" )
} yield (a, b1, b2)
И условие where
из B1.status = 'delete' and B2.status = 'delete'
должно выглядеть так:
val filterB = joinQuery.filter{ case (_, b1, b2) =>
b1.filter(_.status === "delete").isDefined && b2.filter(_.status === "delete").isDefined
}
Обратите внимание, что left join
s, b1
и b2
заключены в Option
, следовательно, использование isDefined
дляand
операция.
В качестве еще одного примечания, возможно, стоит подумать о том, чтобы отфильтровать таблицу B
с B.condition = 'b?'
до уменьшенных B1
и B2
перед выполнением left join
с.