简体   繁体   中英

MS SQL Linked Oracle Server join condition

I am trying to create a view using both SQL tables and tables from linked Oracle database & the SQL part as below

SELECT empv.FULL_NAME,
       CAST(C_Date + ' ' + SUBSTRING(C_Time, 1, 2) + ':' + SUBSTRING(C_Time, 3, 2) + ':'
       + SUBSTRING(C_Time, 5, 2) AS DATETIME) AS "PUNCH_TIME",
       tT.C_Name "MACHINE_NAME",
       CASE
           WHEN LEN(L_UID) < 4 THEN RIGHT('0000' + CAST(L_UID AS VARCHAR(4)), 4)
           ELSE CAST(L_UID AS VARCHAR(10))
       END AS "EMPLOYEE_NUMBER",
       CASE L_MODE
           WHEN 1 THEN 0
           WHEN 2 THEN 1
           ELSE L_MODE
       END AS "PUNCH_TYPE",
       CASE L_RESULT
           WHEN 0 THEN 'S'
           ELSE 'E'
       END AS "PUNCH_RESULT"
FROM tEnter T,
     tTerminal tT,
     [PRODBAK]..APPS.XXFPEMPVIEW empv
WHERE 1 = 1
    AND tT.L_ID = T.L_TID
    AND L_UID <> -1
    AND empv.EMPLOYEE_NUMBER = T.L_UID
    /* AND CAST(GETDATE() AS DATE) BETWEEN empv.effective_start_date and COALESCE(effective_end_date, CAST(getdate() as date))*/
    AND CAST(C_Date + ' ' + SUBSTRING(C_Time, 1, 2) + ':' + SUBSTRING(C_Time, 3, 2) + ':' + SUBSTRING(C_Time, 5, 2) AS DATETIME) 
        BETWEEN empv.effective_start_date AND COALESCE(effective_end_date, CAST(GETDATE() AS DATE))
    AND CAST(C_Date + ' ' + SUBSTRING(C_Time, 1, 2) + ':' + SUBSTRING(C_Time, 3, 2) + ':' + SUBSTRING(C_Time, 5, 2) AS DATETIME)
        > '01/01/2016 00:00:00 AM'
GO

Now I have some issues, MS SQL tables have few user id values (L_UID) those are not matched with the EMPLOYEE_NUMBER column values available with the linked Oracle table. This causes the script to run for long time and finally given up due to values not found. How do I overcome this situation? I am pretty new to MS SQL and the JOIN syntax's are kind of alien for me at this point of time.

Try an replace :

FROM tEnter T,
     tTerminal tT,
     [PRODBAK]..APPS.XXFPEMPVIEW empv
WHERE 1 = 1
    AND tT.L_ID = T.L_TID
    AND L_UID <> -1
    AND empv.EMPLOYEE_NUMBER = T.L_UID

With

....
FROM tEnter T 
LEFT JOIN   tTerminal tT ON tT.L_ID = T.L_TID
Left JOIN  [PRODBAK]..APPS.XXFPEMPVIEW empv ON empv.EMPLOYEE_NUMBER = T.L_UID

WHERE L_UID <> -1
...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM