0

我有一个带有左连接的光标,如下所示:

CURSOR c_emp
    SELECT * FROM FROM EMP_NEW
    LEFT JOIN
    (SELECT EMP_ID,
            DEPT_ID,
            SUB_DEPT_ID,
            EMP_UID,
       FROM EMP)
       USING (DEPT_ID, SUB_DEPT_ID, EMP_UID);

然后在 for 循环中引用它:

For i in c_emp
IF i.emp_id IS NULL
then
    insert into emp...
else
    update emp...
    where emp_id = i.emp_id;
end if;

我们有一个场景,将新数据EMPEMP_NEW表中加载到表中,emp_new.dept_id并且表中可以有一个具有不同值emp_new.emp_uid的副本。当我们得到这样的新数据时,光标中没有选择 ,因此逻辑转到而不是。我希望选择重复项,以便将其转到.EMPsub_dept_idemp.emp_idINSERTUPDATEemp_idUPDATE

电磁脉冲数据:

EMP_ID     DEPT_ID     SUB_DEPT_ID      EMP_UID
123        1           10               123.123

EMP_NEW 数据:

DEPT_ID      SUB_DEPT_ID     EMP_UID
1            20              123.123

上面的游标当前返回以下内容:

EMP_ID     DEPT_ID     SUB_DEPT_ID      EMP_UID
null       1           20               123.123

我希望它返回:

EMP_ID     DEPT_ID     SUB_DEPT_ID      EMP_UID
123        1           20               123.123
4

1 回答 1

0

您似乎想首先匹配 3 列,如果不只匹配两列。我认为横向连接更适合您的需求:

SELECT en.*, e.*
FROM EMP_NEW en LEFT JOIN LATERAL
     (SELECT EMP_ID
      FROM EMP e
      WHERE en.DEPT_ID = e.DEPT_ID AND en.EMP_UID = e.EMP_UID
      ORDER BY (CASE WHEN en.SUB_DEPT_ID = e.SUB_DEPT_ID THEN 1 ELSE 2 END)
      FETCH FIRST 1 ROW ONLY  -- presumably you want only one row either way
     ) e
于 2020-01-13T18:34:52.430 回答