java联合查询_联合查询与多个选择发布Java 8

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

SELECT A.x

FROM A

WHERE A.y = 'P'

UNION

SELECT A.x

FROM A

WHERE A.y = 'Q'

上面是我尝试的原始查询的简化版本.在我的原始查询中,每个SELECT语句都使用INNER JOIN涉及多个表

如果我需要查询的表’A’的’y’列中可能的值数是’n’,那么我的查询将涉及对’n’SELECT语句执行’n-1’联合

我知道JOOQ可以执行多个SELECT语句的并集.但是,有没有一种很好的方法来实现这种Java 8风格?也许使用Steam.collect()?

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

String firstValueToQuery = valuesToQuery.get(0);

Select> selectQuery = getSelectQueryForValue(firstValueToQuery);

valuesToQuery.stream()

.skip(1)

.forEach(valueToQuery -> selectQuery.unionAll(getSelectQueryForValue(valueToQuery)));

selectQuery.fetchStream();

这是我实现getSelectQueryForValue的方法

private Select> getSelectQueryForValue(String valueToQuery) {

return jooq.select(

A.P,

A.Q,

A.R,

A.S,

A.T)

.from(A)

.where(A.Y.eq(valueToQuery));

}

PS:我知道我宁愿使用“ IN”子句,如下所示

SELECT A.x

FROM A

WHERE A.y IN ('P','Q',...)

但是根据我当前在数据库中的数据分布,MySQL正在使用次优的查询计划.因此,使用UNION使得数据库通过使用正确的索引隐式地倾向于更快的查询计划

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值