2013-09-27 239 views
2

我想加入一些表來接收一些數據,但它不能按預期工作。這裏是我的查詢:WHERE子句沒有按預期工作

SELECT USR.PK_User AS PKUser 
    ,USR.NAME AS NAME 
FROM [User] USR 
LEFT JOIN aspnet_Users ASPU ON USR.NAME = ASPU.UserName 
LEFT JOIN aspnet_UsersInRoles ASPUIR ON ASPU.UserId = ASPUIR.UserId 
WHERE ASPUIR.RoleId = 'E8700479-902A-42F1-A500-4FA02CAC356C' 

什麼都沒有從該查詢返回。但如果我這樣做:

SELECT * FROM [aspnet_UsersInRoles] WHERE RoleId = 'E8700479-902A-42F1-A500-4FA02CAC356C' 

我得到76選定的行。如果我只是做:

SELECT USR.PK_User AS PKUser 
    ,USR.NAME AS NAME 
FROM [User] USR 
LEFT JOIN aspnet_Users ASPU ON USR.NAME = ASPU.UserName 
LEFT JOIN aspnet_UsersInRoles ASPUIR ON ASPU.UserId = ASPUIR.UserId 

我得到預期的行返回。此外,如果我添加:

WHERE ASPUIR.RoleId IS NULL 

我得到行回。

我在做什麼錯?

+1

http://wiki.lessthandot.com/index.php/WHERE_conditions_on_a_LEFT_JOIN – HLGEM

回答

3

您需要條件ON而不是WHERE

否則,您只需使其有效地回到內部連接。

SELECT USR.PK_User AS PKUser, 
     USR.NAME AS NAME 
FROM [User] USR 
     LEFT JOIN aspnet_Users ASPU 
     ON USR.NAME = ASPU.UserName 
     LEFT JOIN aspnet_UsersInRoles ASPUIR 
     ON ASPU.UserId = ASPUIR.UserId 
      AND ASPUIR.RoleId = 'E8700479-902A-42F1-A500-4FA02CAC356C' 
+0

你打我吧!爵士:) +1 –

1

試試這個: -

SELECT USR.PK_User AS PKUser, 
    USR.NAME AS NAME 
FROM [User] USR 
    LEFT JOIN aspnet_Users ASPU 
    ON USR.NAME = ASPU.UserName 
    LEFT JOIN aspnet_UsersInRoles ASPUIR 
    ON ASPU.UserId = ASPUIR.UserId 
     AND ASPUIR.RoleId = 'E8700479-902A-42F1-A500-4FA02CAC356C'