Используйте CASE ON LIKE JOIN - PullRequest
       11

Используйте CASE ON LIKE JOIN

0 голосов
/ 26 февраля 2019

Я хотел бы использовать оператор CASE в сочетании с LIKE LEFT JOIN в tblAssets.У меня возникают проблемы с использованием LIKE после THEN в моем заявлении по делу.Ниже у меня есть два отдельных запроса, которые работают.Мне нужно использовать первый запрос для нескольких сценариев, как во втором запросе, но объединение, когда они похожи друг на друга.Можно ли это сделать?

1-й запрос

SELECT tblAssets.AssetName, tblDBFeedImport.DEAL_SRC_NAME
FROM tblDBFeedImport
LEFT JOIN tblAssets 
ON tblDBFeedImport.DEAL_SRC_NAME LIKE + '%' + tblAssets.AssetName + '%'

2-й запрос

SELECT DISTINCT tblAssets.AssetID, tblAssets.AssetName, tblAssets.LS2Name, tblDBFeedImport.DEAL_SRC_NAME, tblDBFeedImport.FACILITY_NAME, tblAssets.PipelineStatusID
FROM tblDBFeedImport

LEFT JOIN tblAssets
ON tblDBFeedImport.DEAL_SRC_NAME = 
CASE
    WHEN tblAssets.AssetName LIKE '%' + tblDBFeedImport.DEAL_SRC_NAME + '%' THEN tblAssets.AssetName
    WHEN tblAssets.LS2Name LIKE '%' + tblDBFeedImport.DEAL_SRC_NAME + '%' THEN tblAssets.LS2Name
    END

WHERE 1=1
AND tblAssets.PipelineStatusID=6
ORDER BY tblAssets.AssetName, tblDBFeedImport.DEAL_SRC_NAME, tblAssets.LS2Name

1 Ответ

0 голосов
/ 26 февраля 2019

Вы также можете использовать CASE для генерации числа, а затем проверить его.

SELECT DISTINCT 
 ass.AssetID, ass.AssetName, ass.LS2Name, 
 imp.DEAL_SRC_NAME, imp.FACILITY_NAME, 
 ass.PipelineStatusID
FROM tblDBFeedImport imp
LEFT JOIN tblAssets ass
ON CASE
   WHEN ass.AssetName LIKE '%' + imp.DEAL_SRC_NAME + '%' THEN 1
   WHEN ass.LS2Name LIKE '%' + imp.DEAL_SRC_NAME + '%' THEN 2
   ELSE 0
   END > 0
WHERE ass.PipelineStatusID = 6
ORDER BY ass.AssetName, imp.DEAL_SRC_NAME, ass.LS2Name

Но использование ИЛИ для этого может быть быстрее

...
LEFT JOIN tblAssets ass
ON (   ass.AssetName LIKE '%' + imp.DEAL_SRC_NAME + '%' 
    OR ass.LS2Name LIKE '%' + imp.DEAL_SRC_NAME + '%')
...
...