【发布时间】:2016-09-08 04:26:17
【问题描述】:
目标:按角色或某些角色排除项返回在日期 X 登录的人数。
我过去以各种方式完成此操作,通常是选择我想要的,然后使用应用程序语言(php 等)循环遍历结果集,查询第二个表。我正在寻找一种更有效的,也许是纯 sql 的方式来做到这一点。
LoginTable
+--------------------+
| userName loginDate |
+--------------------+
| jason 08/15/16 |
| jason 09/01/16 |
| john 08/15/16 |
| john 09/04/16 |
| cindy 08/15/16 |
+--------------------+
RoleTable
+--------------------+
| userName role|
+--------------------+
| jason admin |
| jason student |
| jason employee |
| john employee |
| john admin |
| cindy student |
| cindy hr |
| cindy finance |
+--------------------+
有没有一种纯粹的 oracle SQL 方法可以做到这一点,而不需要进一步的后处理?
例如,一个问题可能是: 谁在 2016 年 8 月 15 日登录,谁拥有员工角色,而不是学生角色。
答案应该是约翰。
从登录表中选择用户名 其中 loginDate = 08/15/16 和 LoginTable.userName in(从 RoleTable 中选择用户名,其中角色 = 员工和角色 学生)
这个查询当然是行不通的。
是否有一种纯 sql 方法来执行此操作,或者我应该返回循环/后处理或临时表?
我正在寻找效率,因为这些表将有数百万行。
【问题讨论】:
-
编辑,试图把表格弄好。
-
您更改了问题,从而使我的答案不正确。你不应该那样做。