在数据库开发和管理中,获取具有特定值的行是相当常见的任务。这听起来像是在公园里散步,但是听起来与将结果限制在那些只具有一个值而不能将其他值排除在外的行相比更棘手。原因是,虽然使用!=或NOT IN这些比较运算符过滤掉值会更简单,但是它们仅隐藏值,而不是告诉我们实体是否拥有其他值。好消息是,有一种简单的方法可以做到这一点。
Navicat Premium是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL、Oracle及PostgreSQL数据库,让管理不同类型的数据库更加的方便。
Navicat Premium最新试用版
在数据库开发和管理中,获取具有特定值的行是相当常见的任务。这听起来像是在公园里散步,但是听起来与将结果限制在那些只具有一个值而不能将其他值排除在外的行相比更棘手。原因是,虽然使用!=或NOT IN这些比较运算符过滤掉值会更简单,但是它们仅隐藏值,而不是告诉我们实体是否拥有其他值。好消息是,有一种简单的方法可以做到这一点。阅读,了解如何!
按角色选择用户
所有数据库以及大多数应用程序拥有的一件事就是用户。特别是,数据库用户倾向于扮演不同的角色。(尽管应用程序用户也可以扮演角色。)以下是Navicat的表设计器中此类表的示例:

user_roles_table_design
在这种情况下,role_id将是一个外键(FK),它链接到一个角色表,该表将存储有关每个角色的其他信息。在用户表中,role_id导致可能为每个用户有多行。请记住这一点,因为稍后会再次讨论该想法。

user_roles_table列出具有特定角色用户的错误方式
如果现在要列出拥有特定用户角色且仅具有该角色的用户,我们可能很想编写类似以下内容的内容:

role_id_equal_to_1
问题在于上述查询仅列出了role_id为1的用户。它并不能解决他们是否也具有其他role_id。此外,添加其他条件(例如)AND role_id NOT IN (2,3,4,5,6,7,8,9)也无济于事,因为1显然不是任何其他数字!
那么,如何将用户限制为只有role_id为1且没有其他角色的用户/p>
列出一个具有特定用户角色的正确方法
嗯,从技术上讲这不是“正确的方法”,因为肯定还有其他人。该解决方案包括计算每个用户的行数。这个想法是,如果一个用户拥有我们感兴趣的role_id并且表中只有一行,那么他们就是我们想要在结果中看到的人。
我们可以使用GROUP BY获得表中每个用户的user_id计数。然后,HAVING子句可以检查用户只有一行,并且他/她的一个role_id是我们想要的:

final_query
现在,我们只看到一个role_id为1的用户,没有其他用户!
结论
这种方法的优点在于,可以轻松地对其进行修改,以查找表中包含多个值或超过一定数量的行。
对Navicat Premium感兴趣可以免费试用 14天,以进行评估!
如果你对我们的产品感兴趣或者有任何疑问,欢迎咨询在线客服>>
标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!