我有两张桌子,
用户
权限
给定username
,是否可以返回包含所有权限和用户详细信息的1行?
我可以想到两种方法,方法1是SELECT * FROM permissions WHERE username = <username>
,并为SELECT * FROM users WHERE username = <username>
做另一个查询。
方法2是连接两个表并使用第一行获取用户详细信息,并使用循环从行的其余部分获取权限。
我觉得这两种方法在关系数据库方面都不是很干净。我应该做什么样的查询才能获得用户详细信息和权限数组?
答案 0 :(得分:0)
您想要检索具有不同基数的两个数据集。有关用户的详细信息包含一行(如果用户可能不存在,则为零)。虽然此用户拥有的权限可能是一个非常大的集合。
正如bbb8989所指出的,一个解决方案是将结果连接成一个字符串,并用您的客户语言进行一些后处理。但是我并不喜欢这个解决方案,因为返回的值不是原子的。
另一个解决方案是进行连接,但是有关用户详细信息的所有字段都将被复制,这可能会造成巨大的网络带宽损失。
因此我的建议是只使用两个不同的查询,因为这里没有明显的优势来合并这些查询;除非它们经常被执行,但我宁愿建议将查询合并到另一个方向;也就是说,一次性检索所有有趣用户的用户详细信息。