2016-08-05 21 views
0

Einige Hintergrund, ich mache eine Tabelle in pgSQL9.5, die die Anzahl der Aktionen von einem Benutzer gezählt und gruppiert diese Aktionen nach Monat mit date_trunc(). Die Zählungen für jede einzelne Aktion werden in separaten Tabellen aufgeteilt, nach diesem Format:pgSQL: Full Outer Beitreten auf zwei Spalten ist das Auslassen von Zeilen

Feedback_Table:        Comments_Table: 
id | month | feedback_counted   id | month | comments_counted 
----+---------+-------------------   ----+---------+------------------- 
1 | 2 |   3      1 | 4 |   12 
1 | 3 |  10      1 | 5 |   4 
1 | 4 |   7      1 | 6 |   57 
1 | 5 |   2      1 | 7 |   12 

Idealerweise möchte ich ein FULL OUTER trete dieser Tabellen auf der „id“ und „Monat“ Spalten in der gleichen Zeit und produzieren diese Abfrage:

Combined_Table: 
id | month | feedback_counted | comments_counted 
----+---------+--------------------+------------------- 
1 | 2 |   3   |   
1 | 3 |  10   |   
1 | 4 |   7   |  12 
1 | 5 |   2   |   4 
1 | 6 |     |  57 
1 | 7 |     |  12 

jedoch meine aktuelle Abfrage, um die Rückkopplungsdaten nicht erfassen, es ist wie eine solche Anzeige:

Rollup_Table: 
id | month | feedback_counted | comments_counted 
----+---------+--------------------+-------------------  
    |   |     |  
    |   |     |  
1 | 4 |   7   |  12 
1 | 5 |   2   |   4 
1 | 6 |     |  57 
1 | 7 |     |  12 

Dies ist meine aktuelle Anweisung, Anmerkung dass es date_trunc anstelle von Monat verwendet. Ich füge die Aktion später hinzu, das Hauptproblem ist irgendwo hier.

Ich bin ein bisschen ein Anfänger mit SQL und bin mir nicht sicher, wie man das behebt, jede Hilfe wäre willkommen.

Antwort

0

Statt ON c.id = f.id AND c.month = f.month:

SELECT c.id, c.month, feedback_counted, comments_counted 
FROM comments c 
FULL OUTER JOIN feedback f 
ON c.id = f.id AND c.month = f.month; 

id | month | feedback_counted | comments_counted 
----+-------+------------------+------------------ 
    |  |    3 |     
    |  |    10 |     
    1 |  4 |    7 |    12 
    1 |  5 |    2 |    4 
    1 |  6 |     |    57 
    1 |  7 |     |    12 
(6 rows)  

Verwendung USING(id, month):

SELECT id, month, feedback_counted, comments_counted 
FROM comments c 
FULL OUTER JOIN feedback f 
USING(id, month); 

id | month | feedback_counted | comments_counted 
----+-------+------------------+------------------ 
    1 |  2 |    3 |     
    1 |  3 |    10 |     
    1 |  4 |    7 |    12 
    1 |  5 |    2 |    4 
    1 |  6 |     |    57 
    1 |  7 |     |    12 
(6 rows) 
+0

Das funktionierte, danke! –