2012-04-05 29 views
0

我有3个以下的表格。我试图比较每个用户的角色。那就是我想表明,约翰有两个角色,而简有1个。目前我只显示他们之间的共同角色。T-SQL比较2用户名

  • Sec_role (PK R_KEY, rname)
  • Role_User(PK R_KEY, PK USER_KEY)
  • User(PK USER_KEY, Name)

的样本数据:

Sec_Role   Role_User  User 

R_Key|rname|  R_Key|User_Key User_KEY|NAME 
1 |Analyst  1 |1   1  |John 
2 |Sysadmin 2 |1   2  |Jane 
        2 |2 

我试图让

User | Role | User2 | Role2 
John | Analyst | Jane | (Empty because she isn't an analyst) 
John | sysadmin| Jane |Sysadmin 

SELECT U.Name AS User1, 
     U2.Name AS User2, 
     R.rname AS Role1 
     R2.Rname AS Role2 
FROM Sec_Role AS R 
LEFT OUTER JOIN Role_User AS RU 
ON R.R_Key=RU.R_Key 
LEFT OUTER JOIN User AS U 
ON U.User_Key=RU.User_Key 

LEFT OUTER JOIN Sec_Role AS R2 
ON R2.R_Key=R.R_Key <---(I think this is the issue here) 
LEFT OUTER JOIN Role_User AS RU2 
ON R2.R_Key=RU2.R_Key 
LEFT OUTER JOIN User AS U2 
ON U2.User_Key=RU2.User_Key 

WHERE U.Name ='John' 
AND U2.Name='Jane' 

目前我得到这两个用户的交集。

User | Role | User2 | Role2 
John | sysadmin| Jane |Sysadmin 
+0

帮助_what_?你没有解释你会得到什么。 – Oded 2012-04-05 18:07:45

+0

我得到这些用户的交集。他们之间常见的是什么。 – Alex 2012-04-05 18:10:05

+0

可能会在每个表格中发布示例数据......难以理解您要求的内容。 – Randy 2012-04-05 18:10:36

回答

1
WHERE U.Name ='John' 
OR U2.Name='Jane' 

音符的或不是与

为什么4列

SELECT U.Name AS User, 
      R.rname AS Role 
    FROM Sec_Role AS R 
    LEFT OUTER JOIN Role_User AS RU 
    ON R.R_Key=RU.R_Key 
    LEFT OUTER JOIN User AS U 
    ON U.User_Key=RU.User_Key 
    where uName in ('','') 
    order by 1, 2 

试试这个

SELECT U.Name AS User1, 
    U2.Name AS User2, 
    R.rname AS Role1 
    R2.Rname AS Role2 
FROM Sec_Role AS R 
LEFT OUTER JOIN Role_User AS RU 
ON R.R_Key=RU.R_Key 
LEFT OUTER JOIN User AS U 
    ON U.User_Key=RU.User_Key 
    and U.Name ='John' 

LEFT OUTER JOIN Sec_Role AS R2 
ON R2.R_Key=R.R_Key <---(I think this is the issue here) 
LEFT OUTER JOIN Role_User AS RU2 
ON R2.R_Key=RU2.R_Key 
LEFT OUTER JOIN User AS U2 
    ON U2.User_Key=RU2.User_Key 
    AND U2.Name='Jane' 
+0

为什么选择4个colums – Paparazzi 2012-04-05 18:19:55

+0

这是一个要求显示用户名相邻而不是在下面。 – Alex 2012-04-05 18:28:55

+0

OK做了OR工作吗? – Paparazzi 2012-04-05 18:41:53