2010-11-22 12 views
1

私はデータベースのnoobですので、私に同行してください。 SqlDataSourceのSelectCommand属性に3つのテーブルを結合しようとしています。現在選択しているコマンドは次のとおりです。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(UserName)のユーザー名、およびその他の詳細を私のカスタムクライアントテーブルから表示しようとしています。しかし、私の結合は機能しません。私はaspnet_MembershipをCreateDateを表示するクライアントとうまく結びつけることができましたが、aspnet_Usersに参加してユーザー名を表示することはできません。私は "aspnet_Users.UserIdはバインドできませんでした"というエラーが出ています。

アイデア?私はかなり問題が参加していると確信していますが、コマンドに何回修正を加えても何の結果も得られません。

何か助けていただければ幸いです。

答えて

2

なぜクライアントを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

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'