2014-08-16 2 views
-1
SELECT A.Name, H.Name as BookedBy 
FROM dbo.vwAllLoads A WITH (NOEXPAND) 
LEFT JOIN dbo.SystemInfo H 
    ON (A.BookedByUserID = H.GlobalNetUserID) 
WHERE ((A.CustomerID IN (SELECT UCR.CustomerID 
          FROM dbo.UserCustomerRelations UCR 
          WHERE UCR.UserID IN 
             (SELECT UserID FROM @PodUsers) 
           OR H.GlobalUserID IN 
             (SELECT UserID FROM @PodUsers))) 

Теперь я фильтрую данные, используя выше, где указано условие. Как я могу выполнить то же самое с помощью соединений или в лучшем виде?SQL Server Conditional Join вместо WHERE .. IN .. clases

Пожалуйста, помогите

+0

Не могли бы вы рассказать вам весь запрос? – Mureinik

+0

Что такое 'A'? Что такое 'H'? –

+0

H не определен. Можно считать, что A - таблица. – Paparazzi

ответ

1

Предположим, что ваш запрос что-то вроде:

select a.* 
from a 
where A.CustomerID IN (SELECT UCR.CustomerID 
         FROM dbo.UserCustomerRelations UCR 
         WHERE UCR.UserID IN (SELECT UserID FROM @PodUsers) OR 
          UCR.GlobalNetUserID IN (SELECT UserID FROM @PodUsers) 
-----------------------------^ was `H`, I'm assuming is `UCR` 
        ) 

Тогда следующее должно быть эквивалентно запрос с использованием join S:

select distinct a.* 
from a join 
    dbo.UserCustomerRelations ucr 
    on A.CustomerID = ucr.CustomerID join 
    @PodUsers pu 
    on ucr.UserId = pu.UserId or ucr.UserId = ucr.GlobalNetUserID = pu.UserId; 

distinct было бы ненужным, если вам что соединения не производят несколько строк

0

Я думаю, что-то вроде этого:

INNER JOIN [dbo].[UserCustomerRelations] UCR 
    ON A.[CustomerID] = UCR.[CustomerID] 
INNER JOIN @PodUsers PU 
    ON UCR.[CustomerID] = PD.[UserID] 
    OR H.[GlobalNetUserID] = PD.[UserID]