我有两张桌子,我给了USERNAME
:
User:
USERID
USERNAME
...other fields...
AccessRights (Many to One relationship with User.USERID):
USERID
GRANT
我想要User.*
个字段,以及所有AccessRights
AccessRights.USERID=User.USERID
我可以通过以下几种方式做到这一点:
但我有这种直觉,我没有想到更好的方法,所以我想我会问。
答案 0 :(得分:1)
根据数据库的不同,您还可以发送一个脚本,输出多个结果集。它还取决于您编写的语言。但是在Java中,如果使用Statement.execute(而不是executeQuery),则可以从查询中检索多个结果集。
这样,您可以先从User表中查询,然后将您要查找的用户填充到局部变量中,然后使用该变量查询AccessRights表。
除非你在谈论AccessRights中的大量行或用户中的大量列,否则进行连接非常简单,效率更高。只是尝试只获取用户所需的字段。通过线路移动的额外字节数据可能比数据库单独查询每个表的多次命中的开销更小(除非您使用上面的方法,这是一次点击,但在大多数情况下它可能有点过头,因为它有点复杂)。
答案 1 :(得分:0)
一种选择是使用函数获取user.*
数据并将AccessRights
行值作为逗号分隔的字符串。像:
| user1 | 1234 | right1,right2,right3 |
在T-SQL(MS SQL Server)中,您可以使用COALESCE
或STUFF
函数,也可以内联操作而不是使用单独的函数。
但你需要注意表现。