asp.net SelectCommand SQL JOIN проблема - PullRequest
1 голос
/ 22 ноября 2010

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

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 голосов
/ 22 ноября 2010

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

Попробуйте:

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 голосов
/ 22 ноября 2010

Это то, что вы опубликовали. Я подозреваю, что в этом и заключается проблема перекрестных соединений.

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