2010-11-22 45 views
1

我是数据库noob,所以请忍受我。我试图在SqlDataSource的SelectCommand属性中一起连接三个表。这里是我目前的选择命令:asp.net SelectCommand SQL JOIN问题

SelectCommand="SELECT DISTINCT a1.[CreateDate], a2.[UserName], c1.[name], c1.[organisation], c1.[address], a1.[IsApproved], a1.[UserId] FROM [aspnet_Membership], [aspnet_Users] a2, [clients] c1 INNER JOIN [aspnet_Membership] a1 ON c1.userid = a1.UserId INNER JOIN [clients] c2 ON c2.userid = a2.UserId AND a1.IsApproved = 'False'" 

这是有点麻烦,因为我一直在玩它。我试图显示来自aspnet_Membership(CreateDate)的注册日期,来自aspnet_Users(用户名)的用户名和我的自定义客户端表中的其他详细信息。但我的联合不起作用。我设法让aspnet_Membership与客户端正常连接来显示CreateDate,但我无法加入aspnet_Users来显示用户名。我不断收到错误,提示“aspnet_Users.UserId无法绑定”。

任何想法?我很确定问题出在加入,但无论我对命令做了多少调整,我都无法得到任何结果。

任何帮助将不胜感激:)

回答

2

为什么要使用客户端两次? (也许解释你想达到什么目的)

试试这个:

SELECT DISTINCT 
    am.[CreateDate], ru.[UserName], cl.[name], cl.[organisation], 
    cl.[address], am.[IsApproved], am.[UserId] 
FROM 
    [aspnet_Membership] am 
    INNER JOIN clients cl 
     ON am.userid = cl.userid 
    INNER JOIN [RolesAndAllUsers] ru 
     ON cl.userid = ri.userid 
WHERE 
    cl.IsApproved = 'False' 
+0

这一些调整后的工作,谢谢! RolesAndAllUsers应该是aspnet_Users(我从另一个例子中得到了前者),但是在改变之后它工作得很好:) – melat0nin 2010-11-22 13:13:46

0

这就是你已经发布。我怀疑交叉连接是你的问题所在。

SELECT DISTINCT a1.[CreateDate], a2.[UserName], c1.[name], c1.[organisation], 
    c1.[address], a1.[IsApproved], a1.[UserId] 
FROM [aspnet_Membership] 
CROSS JOIN [RolesAndAllUsers] a2 
CROSS JOIN [clients] c1 
INNER JOIN [aspnet_Membership] a1 ON c1.userid = a1.UserId 
INNER JOIN [clients] c2 ON c2.userid = a2.UserId 
WHERE a1.IsApproved = 'False'