2012-04-10 3 views
-1

Ich habe zwei Tabelle holen, wie unten, um in bestimmteHost-Wert basierend auf NULL-Wert oder die Anzahl von anderer Tabelle

  1. OPABC
  2. OPHOST

ich die CPU_ID & LOGIN_NAME holen will aus die zweite Tabelle basiert auf den OPABC_JOB_NAME, JOB_NAME, OPABC_CYCLE_KEY, CYCLE_KEY und OPABC_JOB_REC aufgrund einiger der Zyklusschlüssel wie NULL ich bin falsche Werte erhalten.

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 

Antwort

2

Vielleicht können Sie die NVL Funktion verwenden, während die CYCLE_KEY Anpassung, die in beiden Tabellen üblich ist.

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) 

diese Weise auf NULL als CYCLE_KEY begegnen, wird 0 zurückgegeben werden, und Sie werden 16 Zeilen erhalten.

0

Für 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); 

Für 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); 
Verwandte Themen