Внутреннее соединение SQL-запроса - PullRequest
0 голосов
/ 12 апреля 2011

Я хочу изменить запрос в коде моего форума, чтобы вернуть два поля из таблицы tblProfile.В этой таблице есть два поля: «EmailAddress» и «EmailVerified».

Это оригинальный запрос:

SELECT * 
FROM   (SELECT TOP 10 [Scirra].[dbo].[tblForumThread].thread_id, 
                      [Scirra].[dbo].[tblForumThread].MESSAGE, 
                      [Scirra].[dbo].[tblForumThread].message_date, 
                      [Scirra].[dbo].[tblForumThread].show_signature, 
                      [Scirra].[dbo].[tblForumThread].ip_addr, 
                      [Scirra].[dbo].[tblForumThread].hide, 
                      [Scirra].[dbo].[tblForumAuthor].author_id, 
                      [Scirra].[dbo].[tblForumAuthor].username, 
                      [Scirra].[dbo].[tblForumAuthor].homepage, 
                      [Scirra].[dbo].[tblForumAuthor].location, 
                      [Scirra].[dbo].[tblForumAuthor].no_of_posts, 
                      [Scirra].[dbo].[tblForumAuthor].join_date, 
                      [Scirra].[dbo].[tblForumAuthor].SIGNATURE, 
                      [Scirra].[dbo].[tblForumAuthor].active, 
                      [Scirra].[dbo].[tblForumAuthor].avatar, 
                      [Scirra].[dbo].[tblForumAuthor].avatar_title, 
                      [Scirra].[dbo].[tblForumGroup].name 
                             AS groupname, 
                      [Scirra].[dbo].[tblForumGroup].stars, 
                      [Scirra].[dbo].[tblForumGroup].custom_stars, 
                      [Scirra].[dbo].[tblForumGuestName].name 
                             AS guestname, 
                      Row_number() OVER (ORDER BY 
                             [Scirra].[dbo].[tblForumThread].message_date ASC) 
                      AS 
                      rownum
        FROM   ([Scirra].[dbo].[tblForumGroup] 
                INNER JOIN ([Scirra].[dbo].[tblForumAuthor] 
                INNER JOIN [Scirra].[dbo].[tblForumThread] 

                ON [Scirra].[dbo].[tblForumAuthor].author_id = [Scirra].[dbo].[tblForumThread].author_id) 
                ON [Scirra].[dbo].[tblForumGroup].group_id = [Scirra].[dbo].[tblForumAuthor].group_id) 
                LEFT JOIN [Scirra].[dbo].[tblForumGuestName] 
                ON [Scirra].[dbo].[tblForumThread].thread_id = [Scirra].[dbo].[tblForumGuestName].thread_id 
        WHERE


          [Scirra].[dbo].[tblForumThread].topic_id = 33854 
               AND ( [Scirra].[dbo].[tblForumThread].hide = 0 
                      OR [Scirra].[dbo].[tblForumThread].author_id = 13405 ))



                       AS 
       pagingquery 
WHERE  rownum BETWEEN 1 AND 10; 

Я дошел до выбора полей:

 ,
 [Scirra].[dbo].[tblProfile].EmailAddress, 
 [Scirra].[dbo].[tblProfile].EmailVerified

Но я немного застрял при объединении в этом гнезде!

Любая помощь приветствуется!

Редактировать

Извините!Мне нужно присоединиться к tblProfile.UserID с tblAuthor.author_ID

Ответы [ 2 ]

1 голос
/ 12 апреля 2011

Хорошо, если я правильно понял ваш запрос, вы можете попробовать это:

SELECT * 
FROM   (SELECT TOP 10 [Scirra].[dbo].[tblForumThread].thread_id, 
                      [Scirra].[dbo].[tblForumThread].MESSAGE, 
                      [Scirra].[dbo].[tblForumThread].message_date, 
                      [Scirra].[dbo].[tblForumThread].show_signature, 
                      [Scirra].[dbo].[tblForumThread].ip_addr, 
                      [Scirra].[dbo].[tblForumThread].hide, 
                      [Scirra].[dbo].[tblForumAuthor].author_id, 
                      [Scirra].[dbo].[tblForumAuthor].username, 
                      [Scirra].[dbo].[tblForumAuthor].homepage, 
                      [Scirra].[dbo].[tblForumAuthor].location, 
                      [Scirra].[dbo].[tblForumAuthor].no_of_posts, 
                      [Scirra].[dbo].[tblForumAuthor].join_date, 
                      [Scirra].[dbo].[tblForumAuthor].SIGNATURE, 
                      [Scirra].[dbo].[tblForumAuthor].active, 
                      [Scirra].[dbo].[tblForumAuthor].avatar, 
                      [Scirra].[dbo].[tblForumAuthor].avatar_title, 
                      [Scirra].[dbo].[tblForumGroup].name 
                             AS groupname, 
                      [Scirra].[dbo].[tblForumGroup].stars, 
                      [Scirra].[dbo].[tblForumGroup].custom_stars, 
                      [Scirra].[dbo].[tblForumGuestName].name 
                             AS guestname, 
                      [Scirra].[dbo].[tblProfile].EmailAddress, 
                      [Scirra].[dbo].[tblProfile].EmailVerified,
                      Row_number() OVER (ORDER BY 
                             [Scirra].[dbo].[tblForumThread].message_date ASC) 
                      AS 
                      rownum
        FROM   [Scirra].[dbo].[tblForumGroup] 
                INNER JOIN [Scirra].[dbo].[tblForumAuthor] 
                ON [Scirra].[dbo].[tblForumGroup].group_id = [Scirra].[dbo].[tblForumAuthor].group_id
                INNER JOIN [Scirra].[dbo].[tblForumThread] 
                ON [Scirra].[dbo].[tblForumAuthor].author_id = [Scirra].[dbo].[tblForumThread].author_id
                LEFT JOIN [Scirra].[dbo].[tblForumGuestName] 
                ON [Scirra].[dbo].[tblForumThread].thread_id = [Scirra].[dbo].[tblForumGuestName].thread_id 
                LEFT JOIN [Scirra].[dbo].[tblProfile]
                ON [Scirra].[dbo].[tblProfile].UserID = [Scirra].[dbo].[tblForumAuthor].author_ID
        WHERE [Scirra].[dbo].[tblForumThread].topic_id = 33854 
              AND ([Scirra].[dbo].[tblForumThread].hide = 0 OR [Scirra].[dbo].[tblForumThread].author_id = 13405 )) AS pagingquery 
WHERE  rownum BETWEEN 1 AND 10; 
1 голос
/ 12 апреля 2011

Вам нужно будет добавить JOIN в tblProfile:

INNER JOIN [Scirra].[dbo].[tblProfile]   as tp
ON tblAuthor.author_ID  = tp.user_id

Без этого невозможно ссылаться на

 [Scirra].[dbo].[tblProfile].EmailAddress, 
 [Scirra].[dbo].[tblProfile].EmailVerified

Вы можете просто поместить его куда угодно после вашего tblForumAuthorJOIN

...