Использование OR в предложении INNER JOIN - PullRequest
0 голосов
/ 16 октября 2018

У меня есть динамический запрос, в котором я объявляю 3 разные переменные, такие как:

       DECLARE @JobNoteQuery NVARCHAR(MAX) = IIF(@JobNote = '%' , '' , ' INNER JOIN (SELECT ParentGuid FROM JobNotes JN WITH (NOLOCK) 
                            WHERE JN.Note LIKE ''%''+@JobNote+ ''%''
                            GROUP BY ParentGuid) JN ON P.ProjectGuid = JN.ParentGuid');

       DECLARE @ContactQuery NVARCHAR(MAX) = IIF(@Contact = '%' , '' , ' LEFT JOIN(SELECT
                        [ProjectKey]
                        FROM [ProjectCustomerContact] AS [pcc]
                            LEFT JOIN [Contact] AS [c] ON [c].[ContactKey] = [pcc].[ContactKey]
                        WHERE [c].[LastName] LIKE ''%''+@LastName+''%'') AS [pcc] ON [pcc].[ProjectKey] = [p].[ProjectKey]')

       DECLARE @CustomerQuery NVARCHAR(MAX) = IIF(@Customer = '%' , '' , 'LEFT JOIN(SELECT
                        [ProjectKey]
                        FROM [ProjectCustomer] AS [pc]
                            LEFT JOIN [Customer] AS [c] ON [c].[CustomerKey] = [pc].[CustomerKey]
                        WHERE([c].[Name] LIKE ''%''+@CustName+''%''
                            OR [c].[DBA] LIKE ''%''+@CustName+''%'')) AS [PC] ON [pc].[ProjectKey] = [p].[ProjectKey]')

Итак, в запросе выбора я использую эти переменные в предложении Joins, например:

  ...INNER JOIN [Region] AS [re] ON [a].[RegionKey] = [re].[RegionKey]
                          '+@JobNoteQuery+'
                          '+@ContactQuery+'
                          '+@CustomerQuery+'
                       WHERE...

Мой вопрос,Если параметры моего дерева возвращают свои значения, я имею в виду @JobNoteQuery, @ContactQuery и @CustomerQuery, всегда возвращают внутренние и левые объединения, но значение может быть нулевым, если одно из них не имеет значения, оно просто возвратит пустой список, поэтомуЕсть ли способ использовать OR предложение в INNER JOINS?Как:

 ...INNER JOIN [Region] AS [re] ON [a].[RegionKey] = [re].[RegionKey]
          OR
                              '+@JobNoteQuery+'
          OR
                              '+@ContactQuery+'
          OR
                              '+@CustomerQuery+'
                           WHERE...

Это невозможно?Привет

1 Ответ

0 голосов
/ 16 октября 2018

вставьте свои данные во временные таблицы, и затем вы можете начать использовать предоставленные Unions, чтобы иметь одинаковые типы данных столбцов, чтобы просто получить забитый результирующий набор каждого из 3 запросов.ИЛИ у вас есть данные во временных таблицах, в которых оставлено желаемое условие соединения, или внутренние объединения в этот момент будут тривиальными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...