哦,男孩,我可以看到你不會喜歡這個,但這是我能夠在沒有太長時間調查的情況下找到的唯一方法。
這是比解決方案更多的解決方法。 @ insan-e解決方案(簡單地使用兩個查詢)實際上可能更加可行(恕我直言,這是 - 但我不知道你的約束)。
下面是查詢:
TABLE1
.filter(_.someColumn === "1stFilterValue") // your filter basically
.map(_ => LiteralColumn(1))
.union {
TABLE2
.filter(_.someColumn === "2ndFilterValue") // again your filter
.map(_ => LiteralColumn(2))
}.groupBy { marker =>
marker
}.map { case (marker, grouped) =>
(marker, grouped.length)
}
這將產生下面的查詢(假設我有柱name
- 用於過濾):
select x2, count(1)
from (
select 1 as x2
from "TABLE1"
where "NAME" = 'Mike'
union
select 2 as x2
from "TABLE2"
where "NAME" = 'Tom'
)
group by x2
將返回以下結果:
DEBUG s.j.J.benchmark - Execution of prepared statement took 50ms
DEBUG s.j.S.result - /----+----------\
DEBUG s.j.S.result - | 1 | 2 |
DEBUG s.j.S.result - | X2 | COUNT(1) |
DEBUG s.j.S.result - |----+----------|
DEBUG s.j.S.result - | 1 | 1 |
DEBUG s.j.S.result - | 2 | 1 |
DEBUG s.j.S.result - \----+----------/
請記住,特定的行不會出現在結果中,如果c ount爲0(無行)。你需要在你的代碼中處理這個問題!
我想你可以這樣做:'val a1 = q1.length.result; val a2 = q2.length.result; val action = DBIO.sequence(Seq(a1,a2))'並提取第一個和第二個結果... –
上面實際上並沒有在單個查詢中執行它(正如問題中指定的那樣)。 –
'val unionCount =(query.filter(_。someCond)union union query.filter(_。someCond)).length'? – Roman