-1

我有两个表格,如下所示

  1. 奥普ABC
  2. 奥普斯特

我想 根据 , , 和由于某些循环键从第二个表中获取& ,因为CPU_ID我得到了不正确的值。LOGIN_NAMEOPABC_JOB_NAMEJOB_NAMEOPABC_CYCLE_KEYCYCLE_KEYOPABC_JOB_RECNULL

OPABC_JOB_NAME  OPABC_JOB_REC   OPABC_CYCLE_KEY
GENEXT  DAEMON  null
GENEXT  FULL1   1
GENEXT  FULL10  10
GENEXT  FULL11  11
GENEXT  FULL12  12
GENEXT  FULL13  13
GENEXT  FULL14  14
GENEXT  FULL15  15
GENEXT  FULL2   2
GENEXT  FULL3   3
GENEXT  FULL4   4
GENEXT  FULL5   5
GENEXT  FULL6   6
GENEXT  FULL7   7
GENEXT  FULL8   8
GENEXT  FULL9   9


 JOB_NAME   CYCLE_KEY   CPU_ID  LOGIN_NAME
GENEXT  1   sn25666 sbswrk6
GENEXT  10  sn25666 sbswrk6
GENEXT  11  sn25666 sbswrk6
GENEXT  12  sn25666 sbswrk6
GENEXT  13  sn25666 sbswrk6
GENEXT  14  sn25666 sbswrk6
GENEXT  15  sn25666 sbswrk6
GENEXT  2   sn25666 sbswrk6
GENEXT  3   sn25666 sbswrk6
GENEXT  4   sn25666 sbswrk6
GENEXT  5   sn25666 sbswrk6
GENEXT  6   sn25666 sbswrk6
GENEXT  7   sn25666 sbswrk6
GENEXT  8   sn25666 sbswrk6
GENEXT  9   sn25666 sbswrk6
GENEXT  null    sn25666 sbswrk6
4

2 回答 2

2

也许您可以NVL在匹配 的同时使用该函数CYCLE_KEY,这在两个表中都很常见。

SELECT DISTINCT OPABC_JOB_NAME,
                JOB_NAME,
                OPABC_CYCLE_KEY,
                CYCLE_KEY,
                OPABC_JOB_REC,
                CPU_ID,
                LOGIN_NAME
  FROM OPHOST OH, OPABC OB
 WHERE NVL(OH.CYCLE_KEY, 0) = NVL(OB.OPABC_CYCLE_KEY, 0)

这样在遇到NULLasCYCLE_KEY时,将返回 0,您将获得 16 行。

于 2012-04-10T10:38:31.950 回答
0

对于甲骨文:

SELECT cpu_id, login_name
  FROM OPHOST
 WHERE (job_name, nvl(cycle_key, -1)) in (
        SELECT OPABC_JOB_NAME, nvl(OPABC_CYCLE_KEY, -1) FROM OPABC);

对于 MySQL:

SELECT cpu_id, login_name
  FROM OPHOST
  LEFT JOIN OPABC ON job_name = OPABC_JOB_NAME
   AND coalesce(cycle_key, -1) = coalesce(OPABC_CYCLE_KEY, -1);
于 2012-04-10T10:40:30.443 回答