SQL Server INNER JOIN несколько внутренних соединений с несколькими отношениями - PullRequest
6 голосов
/ 23 марта 2012

У меня следующий запрос.Это работает просто отлично, но мне нужно извлечь BUserName из другой таблицы с именем FB, которая имеет поле UserID, которое связано с UserID в таблице FU.Возможно ли это?

    SELECT TOP 100 
    FF.XID, 
    FF.YID, 
    FF.Title, 
    FF.FileName, 
    FF.FilePath, 
    FU.UserName as FUUserName, 
    FU.UserName as BUserName
    FROM FF 
    INNER JOIN FU ON FU.UserID = FF.UserID 

Просто чтобы уточнить.У меня нет столбца UserName в таблице FB.У него есть FB.UserID, который имеет отношение к FF.UserID, из которого я хочу получить второе имя пользователя.Таким образом, с этим отношением я пытаюсь извлечь имя пользователя из таблицы FF.UserID, которая связана с userID в таблице FB.Есть ли в этом смысл?

Ответы [ 5 ]

11 голосов
/ 23 марта 2012

Вы хотите что-то вроде этого:

SELECT TOP 100 
FF.XID, 
FF.YID, 
FF.Title, 
FF.FileName, 
FF.FilePath, 
FU.UserName as FUUserName, 
FU.UserName as BUserName,
FB.BUserName as FB_BUserName
FROM FF 
    INNER JOIN FU ON FU.UserID = FF.UserID 
    INNER JOIN FB ON FB.UserID = FU.UserID

Теперь FF связывается с FU, что затем связывается с FB.Поскольку они все внутренне объединены, вы можете использовать закон ассоциации, чтобы понять, что это действует так, будто они все связаны друг с другом.

 FF = FU   FU = FB    Therefore FF = FB
0 голосов
/ 21 августа 2016

Еще два примера

1- с нулевым результатом:

use my_DB
SELECT tbl_users.UserName
,Updated.UserName   /*Updated not in tbl*/

FROM [my_DB].[dbo].[my_tbl]
left outer join  tbl_users ON tbl_users.UserID = my_tbl.UserID
left outer join tbl_users Updated ON tbl_users.UserID = my_tbl.LasUpdatedUserID

2- без результата:

SELECT tbl_users.UserName
,Updated.UserName   /*Updated not in tbl*/
FROM [my_DB].[dbo].[my_tbl]
INNER JOIN  tbl_users ON tbl_users.UserID = my_tbl.UserID
INNER JOIN tbl_users Updated ON tbl_users.UserID = my_tbl.LasUpdatedUserID

**

0 голосов
/ 23 марта 2012
 SELECT TOP 100 
    FF.XID, 
    FF.YID, 
    FF.Title, 
    FF.FileName, 
    FF.FilePath, 
    FU.UserName as FUUserName, 
    FB.BUserName
    FROM FF 
    INNER JOIN FU ON FU.UserID = FF.UserID 
    INNER JOIN FB ON FB.UserID = FU.UserID
0 голосов
/ 23 марта 2012
SELECT TOP 100 
FF.XID, 
FF.YID, 
FF.Title, 
FF.FileName, 
FF.FilePath, 
FU.UserName as FUUserName, 
FB.UserName as BUserName
FROM FF 
INNER JOIN FU ON FU.UserID = FF.UserID 
INNER JOIN FB ON FU.UserID = FB.UserID 
0 голосов
/ 23 марта 2012

Как это?

SELECT TOP 100  
    FF.XID,  
    FF.YID,  
    FF.Title,  
    FF.FileName,  
    FF.FilePath,  
    FU.UserName as FUUserName,  
    FU.UserName as BUserName,
    FB.BUserName  
    FROM FF  
    INNER JOIN FU ON FU.UserID = FF.UserID  
    INNER JOIN FB ON FU.UserID = FB.UserID  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...