2012-12-28 8 views
8
  1. voce dell'Elenco

tabella 1:come unire due tavoli in PostgreSQL

name| count 
xxx | 1 
yyyy | 2 
zzzz | 3 

tabella 2:

name |count 
xxx | 1 
aaa | 5 

ho bisogno di tradursi in tabella 1 come: tavolo 1:

name | count 
xxx | 1 
yyyy | 2 
zzzz | 3 
aaa | 5 

si prega di dare le vostre idee

+0

non si può fare con una semplice query che controlla l'ID (nome è questo caso) e non un join? –

risposta

27

Si dovrebbe usare UNION.

select * from table1 
union 
select * from table2 

inserire dati nella tabella 1:

INSERT INTO TABLE1 
select * from table2 
    where not exists(
      select * from table1 
       where name=TABLE2.Name 
         and count=TABLE2.Count 
        ) 
+0

hi unoin restituisce il risultato expexted ma la tabella 1 rimane uguale Ho bisogno di inserire i valori nella tabella 1 in qualsiasi nuova tabella2 – user1897937

+0

Ho aggiunto una query da inserire in table1 – valex

+0

@ user1897937 Welcome to Stack Overflow. Se questa risposta ha funzionato per te, perfavore [contrassegnalo come accettato] (http://stackoverflow.com/faq#howtoask) – valex

0

è possibile verificare se questo sta lavorando in vostro sviluppatore,

MERGE INTO table1 x 
USING table2 b 
ON (x.name=b.name and x.count=b.count) 
WHEN NOT MATCHED THEN 
INSERT (x.name,x.count)VALUES(b.name,b.count); 
+0

Non penso che PostgreSQL supporti MERGE INTO, forse nella versione 9.5? – Joril

5

non abbiamo bisogno di alcuna speciale MERGE/UPSERT comando.

  1. Per unire le righe da una tabella all'altra.

    INSERT INTO table1 
        (SELECT * FROM table2 
        WHERE name NOT IN 
         (SELECT name FROM table1)); 
    
  2. Per creare una nuova tabella da tabelle precedenti.

    CREATE TABLE new_table AS 
    (SELECT * FROM table1 
    UNION 
    SELECT * FROM table2);