使用查询结果将SQL Server查找数据组合为表进行搜索

时间:2015-04-30 17:31:49

标签: sql-server

我有一个名为Lookup的表,用于定义UsersGroupsApps之间的关联:

aLookup:

+----+---------+-------+-----------+---------+
| id | from_id | to_id | from_type | to_type |
+====+=========+=======+===========+=========+
|  1 |    1    |   2   |    User   |  Group  |
+----+---------+-------+-----------+---------+
|  1 |    2    |   1   |    Group  |   App   |
+----+---------+-------+-----------+---------+

 aUser                      aGroup          aApp
+----+---------+--------+  +----+-------+  +----+-----------+--------+
| id |  F_Name | L_Name |  | id |  Name |  | id |    Name   |   url  |
+====+=========+========+  +====+=======+  +====+===========+========+
|  1 |  Foobar | Whatley|  |  1 |   Sys |  |  1 | TPS_Admin | /tpsa/ |
+----+---------+--------+  +----+-------+  +----+-----------+--------+
|  2 |   Turd  |Ferguson|  |  2 |  Mgmt |  |  2 |     TPS   |  /tps/ |
+----+---------+--------+  +----+-------+  +----+-----------+--------+

Lookup表格通过Users授予Applications Groups次访问权。

我想使用from_type& to_type作为要搜索的表。

类似的东西:

SELECT 
    l.id, X.Name AS from_name, Y.Name AS to_name
FROM 
    aLookup l
LEFT JOIN 
    ["a" + l.from_type] X ON l.from_id = X.id
LEFT JOIN 
    ["a" + l.to_type] Y ON l.to_id = Y.id

理想情况下会产生类似这样的东西:

+----+-----------+------------+
| id |   from_name  | to_name |
+====+==============+=========+
|  1 |Foobar Whatley|   Mktg  |
+----+--------------+---------+
|  1 |     Mktg     |   TPS   |    
+----+--------------+---------+

我已经检查了a few articles,但他们似乎更多地将数据合并到一个实体;比如特定日期销售的商品数量。而我需要将数据整合在一起的东西。

这里有一些要记住的事情:

  • 我意识到必须有一些条件逻辑来处理用户的第一个&姓氏只是姓名'但我不确定这是什么样的。
  • 我可以更改任何表格结构, 没有任何内容设置为 。因此,如果您认为有更好的方法来完成整个事情,请告诉我。
  • 我正在使用Code Behind(C#)来开发它,所以这也是一种可能性,尽管我希望将与db的连接保持在最低限度。

1 个答案:

答案 0 :(得分:0)

你是怎么想出这么奇怪的方式来做到这一点的? 我会做这样的事情:

实体表:

  • TblGroups:
    Group_Id int
    Group_Name varchar(50) - 或任何适合您需要的数字

  • TblApps
    App_Id int
    App_Name varchar(50) - 或任何适合您需要的数字

  • 向tblUsers
    User_Id int
    User_UserName varchar(20)
    User_Password varchar(10) - 不要忘记加密!!!
    其他用户详细信息,例如用户名和姓氏以及其他......

连接表:

  • TblUserToGroup
    UTG_UserId int UTG_GroupId int

  • TblGroupToApp
    GTA_GroupId int GTA_AppId int

我想我不必告诉你要使用哪些索引,但如果我只是发表评论而且我会编辑我的答案。