根据其他表中的NULL值或数字获取主机值

时间:2012-04-10 09:46:55

标签: mysql sql

我有两张表,如下所示

  1. OPABC
  2. OPHOST
  3. 我想要取CPU_ID& LOGIN_NAME来自第二个表格,基于OPABC_JOB_NAMEJOB_NAMEOPABC_CYCLE_KEYCYCLE_KEYOPABC_JOB_REC,因为某些循环密钥为{ {1}}我的值不正确。

    NULL

2 个答案:

答案 0 :(得分: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 CYCLE_KEY时,将返回0,您将获得16行。

答案 1 :(得分:0)

对于ORACLE:

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);