问题描述
user
:
+----+-------+--------+----
| id | login | active | ...
+----+-------+--------+----
| 1 | alice | 1 |
| 2 | bob | 1 |
| 3 | carol | 0 |
| 4 | dave | 1 |
+----+-------+--------+----
user_x_usergroup
:
+---------+--------------+
| user_id | usergroup_id |
+---------+--------------+
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 4 |
| 3 | 3 |
| 4 | 3 |
+---------+--------------+
usergroup
:
+----+-----+-------------+
| id | ... | permissions |
+----+-----+-------------+
| 1 | | 1 |
| 2 | | 2 |
| 3 | | 4 |
| 4 | | 2 |
+----+-------------------+
我想检索所有login
,它们是active
并是usergroup
值permissions
的{{1}}成员,在MysqL中。
在Java中,这将是:
1
在示例中,结果应为
List<String> logins =
users.parallelStream() // FROM users
.filter(user ->
user.isActive() && // user.active = 1
user.getUserGroups().parallelStream().anyMatch(
group -> group.getPermissions() == 1 // usergroup.permissions = 1
)
)
.map(User::getLogin) // SELECT login
.collect(Collectors.toList());
我没有找到一个很好的例子。
以下方法确实有效,但是我不确定这是否是一种好的语法:
+-------+
| login |
+-------+
| alice |
| bob |
+-------+
它会创建(并非很令人惊讶)行的所有组合,但是首先应该足以根据交叉表创建行。
上述命令是实现此目标的唯一,最有效的方法,还是有更好的解决方案?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)