2017-08-17 2 views
1

Ich habe drei Tabellen mit jeweils einem gemeinsamen Feld. Ich möchte eine SUMME für jede Zeile in Tabelle 3 aus einer Spalte in Tabelle 1 und einer Spalte in Tabelle 2 berechnen. Die SUM muss jedoch auf dem übereinstimmenden ID-Feld basieren.PostgreSQL Summe zwischen Tabelle

Bisher habe ich:

INSERT INTO table_3.cost_label 
SELECT table_1.col_2 + table_2.col_2 
FROM table_1, table_2; 

Table 1 
ID Value 
1  10 
2  20 
3  30 

Table 2 
ID Value 
1  20 
2  40 
3  60 

Table 3-Final Output 
ID Value 
1  30 
2  60 
3  90 

Gibt es eine Möglichkeit, dies auf einer gemeinsamen Anpassungsfeld zu stützen?

+0

wenn ich Sie recht - es ist bereits auf dem passenden Feld - nicht wahr? –

+0

Nein, es ist einfach die Summe zwischen Tabelle 1 und Tabelle 2 zu berechnen und sie in Tabelle 3 unterhalb der aktuellen Datensätze zu platzieren. – CamMuller

+0

bitte einige Beispieldaten und gewünschtes Ergebnis posten –

Antwort

0

Sie vermissen nur eine Join-Bedingung. Sie können es die nicht-explizite Art und Weise tun:

INSERT INTO table_3 (ID, cost_label) 
SELECT 
    table_1.ID, 
    table_1.col_2 + table_2.col_2 
FROM 
    table_1, 
    table_2 
WHERE 
    table_1.ID = table_2.ID; 

Oder die explizite Art und Weise:

INSERT INTO table_3 (ID, cost_label) 
SELECT 
    table_1.ID, 
    table_1.col_2 + table_2.col_2 
FROM 
    table_1 
    JOIN table_2 ON table_1.ID = table_2.ID; 
+0

Danke für die Antwort @jcaron. Ich habe Ihren Ansatz versucht, aber die Ausgabe der Summe zwischen Tabelle 1 und Tabelle 2 wird immer noch nicht mit der entsprechenden ID in Tabelle 3 verknüpft. – CamMuller

+0

Sie sagten, Sie wollten neue Zeilen hinzufügen? Was möchtest du eigentlich machen? Aktualisieren Sie Daten in vorhandenen Zeilen? – jcaron

+0

Ja, die Zeilen in Tabelle 3 müssen mit der Ausgabe der Summe zwischen Tabelle 1 und Tabelle 2 aktualisiert werden. Die Verknüpfung mit Tabelle 3 muss sich jedoch auf das Feld mit der gemeinsamen ID beziehen. Mein letzter Ansatz war ein INNER JOIN, hatte aber immer noch keinen Erfolg. – CamMuller