-1

以下に示すように、2つのテーブルを順番に持っています

  1. OPABC
  2. オフォトスト

に基づいて 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)

NULLこのようにasに遭遇するとCYCLE_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 に答える