левое соединение левое соединение - PullRequest
0 голосов
/ 14 января 2019

Следующий код работает нормально:

SELECT *    -- * only for clarity
FROM
   (    SELECT      dbo.Contracts.buyerID AS PreviousContractPartyIDs 
        FROM        dbo.Contracts 
        WHERE       dbo.Contracts.sellerID = @UserID 
        GROUP BY    dbo.Contracts.buyerID 

        UNION

        SELECT      dbo.Contracts.sellerID 
        FROM        dbo.Contracts 
        WHERE       dbo.Contracts.BuyerID = @UserID 
        GROUP BY    dbo.Contracts.sellerID 
   ) AS ListOfAllMembersPreviouslyTradedWith

LEFT JOIN 

  ( SELECT  dbo.Members.ID, 
            dbo.Members.Name, 
            dbo.Members.Description 
    FROM    dbo.Members 
  ) AS MemberDetails 

ON ListOfAllMembersPreviouslyTradedWith.PreviousContractPartyIDs = MemberDetails.ID

Верхняя часть выбирает всех пользователей, с которыми торговал Участник, а нижняя часть добавляет подробности о каждом из них. Однако участник может добавить примечания о каждом пользователе в tbl.Notes, но я не могу понять synatx / структуру, чтобы добавить еще одно объединение по существу следующим образом:

LEFT JOIN 
( SELECT MemberID, NoteAboutMemberID, Note, UTC from dbo.Notes ) AS NoteDetails     

ON ListOfAllMembersPreviouslyTradedWith.PreviousContractPartyIDs = NoteDetails.NoteAboutMemberID 

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Важный факт для рассмотрения,

  1. Ваш подзапрос ListOfAllMembersPreviouslyTradedWith отличается от идентификатора "PreviousContractPartyIDs"?

тогда приведенный ниже код подойдет, так как вы используете синтаксический подзапрос UNION, который уже будет отличаться, и вы можете избежать группы, поскольку агрегация отсутствует. Наконец осталось объединить оба подзапроса.

SELECT *   
FROM
   (    SELECT      dbo.Contracts.buyerID AS PreviousContractPartyIDs 
        FROM        dbo.Contracts 
        WHERE       dbo.Contracts.sellerID = @UserID 


        UNION

        SELECT      dbo.Contracts.sellerID 
        FROM        dbo.Contracts 
        WHERE       dbo.Contracts.BuyerID = @UserID 

   ) AS ListOfAllMembersPreviouslyTradedWith

LEFT JOIN 

  ( SELECT DISTINCT  dbo.Members.ID, 
            dbo.Members.Name, 
            dbo.Members.Description 
    FROM    dbo.Members 
  ) AS MemberDetails 

ON ListOfAllMembersPreviouslyTradedWith.PreviousContractPartyIDs = MemberDetails.ID

LEFT JOIN 
( SELECT DISTINCT MemberID, NoteAboutMemberID, Note, UTC from dbo.Notes ) AS NoteDetails     

ON ListOfAllMembersPreviouslyTradedWith.PreviousContractPartyIDs = NoteDetails.NoteAboutMemberID 
0 голосов
/ 14 января 2019

Я думаю, вам нужно ниже

    SELECT ListOfAllMembersPreviouslyTradedWith.*,
            MemberDetails.*,
               NoteDetails.*
    FROM
       (    SELECT      distinct dbo.Contracts.buyerID AS PreviousContractPartyIDs 
            FROM        dbo.Contracts 
            WHERE       dbo.Contracts.sellerID = @UserID 


            UNION

            SELECT      distinct dbo.Contracts.sellerID 
            FROM        dbo.Contracts 
            WHERE       dbo.Contracts.BuyerID = @UserID 

       ) AS ListOfAllMembersPreviouslyTradedWith

    LEFT JOIN 

      ( SELECT  dbo.Members.ID, 
                dbo.Members.Name, 
                dbo.Members.Description 
        FROM    dbo.Members 
      ) AS MemberDetails 

    ON ListOfAllMembersPreviouslyTradedWith.PreviousContractPartyIDs = MemberDetails.ID
 LEFT JOIN 
( SELECT MemberID, NoteAboutMemberID, Note, UTC from dbo.Notes ) AS NoteDetails     

ON ListOfAllMembersPreviouslyTradedWith.PreviousContractPartyIDs = NoteDetails.MemberID AND MemberDetails.ID = NoteDetails.NoteAboutMemberID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...