2010-11-22 5 views
1

Je suis un noob de base de données alors s'il vous plaît ours avec moi. J'essaye de joindre trois tables ensemble dans l'attribut SelectCommand d'un SqlDataSource. Voici ma commande de sélection pour le moment:asp.net SelectCommand SQL JOIN problème

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'" 

C'est un peu mucky parce que j'ai joué avec. J'essaye d'afficher la date inscrite de aspnet_Membership (CreateDate), le nom d'utilisateur de Aspnet_Users (UserName) et d'autres détails de ma table de clients personnalisés. Mais mes jointures ne fonctionnent pas. J'ai réussi à faire en sorte que aspnet_Membership se joigne bien aux clients pour afficher CreateDate, mais je ne peux pas rejoindre aspnet_Users pour afficher le nom d'utilisateur. Je continue d'obtenir des erreurs en disant "aspnet_Users.UserId ne pouvait pas être lié".

Des idées? Je suis assez sûr que le problème est dans la jointure, mais peu importe combien de réglages je fais à la commande je ne peux pas obtenir de résultats.

Toute aide serait grandement appréciée :)

Répondre

2

Pourquoi utilisez-vous deux fois les clients? (Peut-être expliquer ce que vous essayez d'atteindre)

Essayez ceci:

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

Cela a fonctionné après quelques ajustements, merci! RolesAndAllUsers aurait dû être aspnet_Users (j'ai obtenu le précédent à partir d'un autre exemple), mais après avoir changé cela fonctionne très bien :) – melat0nin

0

Voici ce que vous avez signalé. Je soupçonne que les jointures croisées sont où votre problème réside.

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'