2010-11-22 2 views
1

Я база данных noob, поэтому, пожалуйста, несите меня. Я пытаюсь объединить три таблицы вместе в атрибуте SelectCommand для SqlDataSource. Вот моя выбранная команда на данный момент:asp.net SelectCommand SQL JOIN problem

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

Почему вы используете клиентов дважды? (Может быть, объясните, что вы пытаетесь достичь)

Попробуйте это:

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'