2016-08-19 4 views
1

ich habe zwei Tabellen wie untenTabelle und füllen null Spalte mit Rücktabellenwert

TableA 
A_id name 
---- ---- 
123  Test1 
124  Test2 
125  Test3 
126  Test4 

TableB 
B_id fk_A_id value  type_id 
---- ------- -----  ------- 
1  123  op1  1 
2  123  hello  2 
3  123  abc  3 
4  126  op2  1 
5  126  hello  2 
6  126  def  3 

i-Abfrage verwenden beide Tabelle beitreten

select TableA.A_id as id, TableA.name as name, TBL2.type_name as type_name 
from TableA 
full join (
select fk_A_id, value as type_name 
from TableB 
where type_id = 2 
)TBL2 on TableA.A_id = TBL2.fk_A_id 

das Rückergebnis wäre

id   name   type_name 
--   ----   --------- 
123   Test1   hello 
124   Test2    
125   Test3 
126   Test4   hello 

Meine Frage ist, wie fülle ich die Null-Spalte mit 'Hallo' auch das ist das Ergebnis der Rückgabe von TableB, der Typ_ID = '2' wird über diesen TableB ähnliche Saite haben

+0

Ich bin nicht ganz verstehen. Warum möchtest du die Spalte 'null' mit 'hallo' füllen? Gehen Sie davon aus, dass 'type_id = 2' immer' hallo' zurückgibt? Wenn dies der Fall ist, würde dies eine andere Abfrage sein, die stattdessen eine Kreuzverknüpfung verwendet. – sgeddes

+0

Ja, die Daten selbst für type_id = 2 werden auch 'hallo' sein – hghew

+0

Wenn du weißt, dass es immer 'hallo' ist, warum nicht einfach' hallo' benutzen? Wenn es basierend auf der 'type_id' dynamisch ist, sollten Sie eine' cross join' verwenden. Ihre Beispieldaten schlagen jedoch nicht vor, dass die 'type_id' immer die gleiche pro' Wert' ist ... – sgeddes

Antwort

0

Ich denke, Sie left join wollen, wie folgt aus:

select a.A_id as id, a.name as name, b.type_name as type_name 
from TableA a left join 
    TableB b 
    on a.A_id = b.fk_A_id and b.type_id = 2; 

Es besteht keine Notwendigkeit für eine Unterabfrage ist und die full join Overkill ist.

Wenn Sie die NULL Wert wollen auch hello sein, verwenden coalesce():

select a.A_id as id, a.name as name, 
     coalesce(b.type_name, 'hello') as type_name 
from TableA a left join 
    TableB b 
    on a.A_id = b.fk_A_id and b.type_id = 2; 
+0

ja, versuchte Ihre Abfrage scheint scheint das gleiche Ergebnis, aber ich wollte die Null-Spalte mit Hallo zu füllen – hghew

Verwandte Themen