多个联合查询选择post java 8

时间:2018-02-26 15:35:23

标签: java mysql java-stream jooq

这是我想在MySQL中试用的查询

SELECT A.x
FROM A
WHERE A.y = 'P'
UNION
SELECT A.x
FROM A
WHERE A.y = 'Q'

以上是我正在尝试的原始查询的简化版本。在我的原始查询中,每个SELECT语句都涉及多个带INNER JOIN

的表

如果' y'中的值可能有多少?表格的一栏' A'我需要查询的是' n'然后我的查询将涉及做' n-1'工会在' n' SELECT陈述

我知道JOOQ可以组合多个SELECT语句。但是有没有一种很好的方法来发布Java 8风格?也许使用Steam.collect()?

这就是我的想法,但我想知道我是否可以做得更好

String firstValueToQuery = valuesToQuery.get(0);
Select<Record5<UUID, UUID, String, Integer, String>> selectQuery =  getSelectQueryForValue(firstValueToQuery);
valuesToQuery.stream()
             .skip(1)
             .forEach(valueToQuery -> selectQuery.unionAll(getSelectQueryForValue(valueToQuery)));
selectQuery.fetchStream();

以下是我实施getSelectQueryForValue

的方法
private Select<Record5<UUID, UUID, String, Integer, String>> getSelectQueryForValue(String valueToQuery) {
        return jooq.select(
                A.P,
                A.Q,
                A.R,
                A.S,
                A.T)
                .from(A)
                .where(A.Y.eq(valueToQuery));
    }
PS:我明白我宁愿使用&#39; IN&#39;如下条款

SELECT A.x
FROM A
WHERE A.y IN ('P','Q',...)

但是由于我目前在数据库中的数据分布,MySQL正在使用次优查询计划。因此,使用UNION,以便数据库通过使用正确的索引隐式地更喜欢更快的查询计划

0 个答案:

没有答案