2016-07-18 16 views
0

我試圖轉換下面的T-SQL Select查詢以排除「Exists」子句幷包含「Join」子句。但我最終沒有得到正確的結果。這個專家團隊中的一些人可以幫助我一些提示。將存在條件轉換爲與T-SQL連接

select * 
FROM HRData 
INNER JOIN (
    SELECT eeceeid, MIN(eecdateoftermination) eTermDate 
      FROM dbo.empcomp 
      INNER JOIN 
      (
      SELECT xeeid FROM HRData_EEList 
      INNER JOIN dbo.empcomp t ON xeeid = eeceeid AND xcoid = eeccoid 
      WHERE eecemplstatus = 'T' AND eectermreason <> 'TRO' AND eeccoid <> 'WAON6' 
      AND EXISTS ( SELECT 1 FROM dbo.empded 
          INNER JOIN dbo.dedcode on deddedcode = eeddedcode AND deddedtype = 'MED' AND (eedbenstopdate IS NULL OR eedbenstopdate > '12/31/2005') 
          WHERE eedeeid = xeeid AND eedcoid = xcoid) 
      GROUP BY xeeid 
      HAVING COUNT(*) > 1) Term ON xeeid = eeceeid 
      group by eeceeid 

) Terms ON eeid = eeceeid AND Termdate = eTermDate 
+2

你已經錯過了發佈查詢 – TheGameiswar

+1

爲什麼要將其轉換爲連接的第一個可能會進行優化,更好地?你可能有多行匹配EXISTS返回多行 - >「沒有得到正確的結果」。 – dnoeth

+0

我需要將此查詢轉換爲「JOIN」子句在informatica中實現該功能。 – user6603720

回答

0

有趣的請求。

select * 
FROM HRData 
INNER JOIN (
    SELECT eeceeid, MIN(eecdateoftermination) eTermDate 
      FROM dbo.empcomp 
      INNER JOIN 
      (
      SELECT xeeid FROM HRData_EEList 
      INNER JOIN dbo.empcomp t ON xeeid = eeceeid AND xcoid = eeccoid 
      INNER JOIN 
      ( SELECT DISTINCT xeeid, xcoid FROM dbo.empded 
          INNER JOIN dbo.dedcode on deddedcode = eeddedcode AND deddedtype = 'MED' AND (eedbenstopdate IS NULL OR eedbenstopdate > '12/31/2005') 
          -- WHERE eedeeid = xeeid AND eedcoid = xcoid 
      ) AS A ON xeeid = A.xeeid AND eedcoid = A.eedcoid 
      WHERE eecemplstatus = 'T' AND eectermreason <> 'TRO' AND eeccoid <> 'WAON6'    
      GROUP BY xeeid 
      HAVING COUNT(*) > 1) Term ON xeeid = eeceeid 
      group by eeceeid 

) Terms ON eeid = eeceeid AND Termdate = eTermDate 
0

轉換EXISTSJOIN的算法非常簡單。

而不是

FROM A 
WHERE EXISTS (SELECT * 
       FROM B 
       WHERE A.Foo = B.Foo) 

使用

FROM A 
     INNER JOIN (SELECT DISTINCT Foo 
        FROM B) AS B 
     ON A.Foo = B.Foo