如何解决如何根据交叉表链接的属性选择行?
我有用户使用交叉表链接到组。示例:
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 举报,一经查实,本站将立刻删除。