2016-04-25 4 views
0

Ich habe zwei Tabellen:Überschreiben NULL-Ergebnis in Abfrage mit dem nächsten NOT NULL Wert

t1

t1.id | t1.val 
----- | ------ 
    1 | a 
    2 | b 
    3 | c 
    4 | d 
    5 | e 
    6 | f 
    7 | j 

und t2

t2.id|t2.val 
---- | --- 
    1| www 
    3| xxx 
    6| yyy 
    7| zzz 

Wenn ich solche SQL-Anweisung anwenden :

SELECT t1.id, t1.val, t2.val 
FROM t1 
LEFT JOIN t2 ON (t1.id = t2.id) 

Und Ergebnis gibt einen Tisch

t1.id | t1.val | t2.val 
----- | ------ | ------ 
    1 | a | www 
    2 | b | NULL 
    3 | c | xxx 
    4 | d | NULL 
    5 | e | NULL 
    6 | f | yyy 
    7 | j | zzz 

Hilf mir, die SQL-Anweisung zu ändern, wenn ich ähnliche

t1.id | t1.val | t2.val 
----- | ------ | ------ 
    1 | a | www 
    2 | b | xxx 
    3 | c | xxx 
    4 | d | yyy 
    5 | e | yyy 
    6 | f | yyy 
    7 | j | zzz 

Vielen Dank für alle führen wollen erhalten !!

Antwort

0

Ein Verfahren verwendet eine korrelierte Unterabfrage:

select t1.*, 
     (select t2.val 
     from t2 
     where t2.id >= t1.id 
     order by t2.id 
     limit 1 
     ) as t2val 
from t1; 

Ein anderes Verfahren verwendet Funktionen Fenster, aber es ist ein bisschen komplizierter:

SELECT t1.id, t1.val, t2.val 
FROM (SELECT t1.id, t1.val, 
      MIN(t2.id) OVER (ORDER BY id DESC) as matching_id 
     FROM t1 LEFT JOIN 
      t2 
      ON t1.id = t2.id 
    ) t LEFT JOIN 
    t2 
    ON t2.id = t.matching_id; 
0

SELECT t1.id, t1.val, NVL (t2.val, BLEI (t2.val) OVER (ORDER BY t2.id)) VON t1 LINKE VERBINDUNG t2 EIN (t1.id = t2.id)

Verwandte Themen