2016-11-07 1 views
1

Ich habe zwei-Tabelle mit einigen Einträgen derselben, zB Tabelle A:Verschmelzen von zwei Tabellen basierend auf Primärschlüssel

ID   value  type 
1   1   2 
2   3   2 
3   3   2 

Tabelle B:

ID  value  type 
2   3   1 
3   3   1 
4   1   1 

Ich möchte sie verschmelzen, so dass sich ergeb Tabelle sieht aus wie

Tabelle C:

ID  value  type 
2   3   2 
3   3   2 
4   1   1 

dh entfernen Sie die Zeilen, die nicht in Tabelle A sind, zeigen Sie Zeilen doppelt in Tabelle A mit dem Typ der Tabelle A an und zeigen Sie auch die Zeilen an, die nicht in Tabelle A sind.

Bis jetzt habe ich den UNION-Befehl gemacht Entfernen Sie doppelte

aber wie man Typ von Tabelle A bekommen? kann dies getan werden oder ich muss sie separat aktualisieren.

+2

Wenn Sie „die Zeilen entfernen, die nicht in Tabelle A sind“, warum ist die Zeile mit der ID "4" in Tabelle C? – Twinkles

+0

... entfernen Sie die Zeilen, die nicht in Tabelle A enthalten sind .... zeigen Sie auch die Zeilen an, die nicht in Tabelle A enthalten sind ... können Sie das besser erklären? –

Antwort

1

Sie können es mit einem LEFT JOIN:

SELECT b.id,b.value, 
     COALESCE(a.type,b.type) as type 
FROM TableB b 
LEFT JOIN TableA a 
ON(a.id = b.id) 
+0

Habe ich außer "A" und "B" noch etwas anderes vermisst? @Strawberry – sagi

+0

Ich denke, das war es - obwohl der Quelldatensatz ein wenig zu abgegriffen ist, um es sicher zu sagen. – Strawberry

1

Das tut, was Sie wollen

select b.id, b.value, ifnull(a.type,b.type) as type 
from b 
left join a 
on b.id = a.id; 
+0

@ Sagis Antwort sieht mir gleich –

+0

@ sagis Antwort hat den Vorteil, dass sie dem ansi sql Standard entspricht. Es bedeutet nur, dass es tragbarer ist. – Strawberry

+0

Ah, danke. Das wusste ich nicht –

Verwandte Themen