Преобразование вложенных элементов Select в WHERE .. ИЛИ .. во ВНУТРЕННИЕ СОЕДИНЕНИЯ - PullRequest
0 голосов
/ 23 октября 2009

Как бы я преобразовал следующее, чтобы использовать INNER JOIN вместо вложенного SELECT?

SELECT 
    [Name].[NameValueID],
    [Name].[NameTypeID],
    [Name].[NameID],
    [Name].[Value]
FROM [Name] 
WHERE Name.NameTypeID IN ( SELECT NameTypeID FROM @tbNameType ) 
    OR Name.NameID IN ( SELECT NameID FROM @tbName) 

Ответы [ 2 ]

3 голосов
/ 23 октября 2009
SELECT DISTINCT
    Name.NameValueID,
    Name.NameTypeID,
    Name.NameID,
    Name.Value
FROM
    Name
    LEFT JOIN @tbNameType a ON a.NameTypeID=Name.NameTypeID
    LEFT JOIN @tbName b ON b.NameID=Name.NameID
WHERE a.NameTypeID IS NOT NULL OR b.NameID IS NOT NULL
3 голосов
/ 23 октября 2009

Это сложно, потому что это условие «ИЛИ», а не «И». Но я думаю, что это сделало бы это:

SELECT 
        [Name].[NameValueID],
        [Name].[NameTypeID],
        [Name].[NameID],
        [Name].[Value]
FROM [Name] 
INNER JOIN  ( SELECT NameTypeID FROM @tbNameType ) t ON t.NameTypeID=Name.NameTypeID

UNION

SELECT 
        [Name].[NameValueID],
        [Name].[NameTypeID],
        [Name].[NameID],
        [Name].[Value]
FROM [Name]
INNER JOIN ( SELECT NameID FROM @tbName) t ON t.NameID = Name.NameID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...