如何根据交叉表链接的属性选择行?

问题描述

我有用户使用交叉表链接到组。示例:

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并是usergrouppermissions的{​​{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 (将#修改为@)