2012-12-28 14 views
8
  1. przedmiot

Tabela 1:jak połączyć dwie tabele w postgresql

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

Tabela 2:

name |count 
xxx | 1 
aaa | 5 

muszę prowadzić w tabeli 1, jak: stole 1:

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

Podaj swoje pomysły

+0

nie można to zrobić za pomocą prostego zapytania, który sprawdza identyfikator (nazwa jest to przypadek) i robi się przyłączyć? –

Odpowiedz

27

Powinieneś używać UNION.

select * from table1 
union 
select * from table2 

wstawić do tabeli 1:

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

cześć unoin daje wynik, ale tabela 1 pozostaje taka sama, muszę wstawić wartości z tabeli 1, niezależnie od nowych w tabeli2 – user1897937

+0

Dodałem zapytanie do wstawienia do tabeli1 – valex

+0

@ user1897937 Witamy w Stack Overflow. Jeśli ta odpowiedź zadziałała dla ciebie, proszę [zaznacz to jako zaakceptowane] (http://stackoverflow.com/faq#howtoask) – valex

0

można sprawdzić, czy to działa w swoim deweloperem,

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

Nie sądzę, że PostgreSQL obsługuje MERGE INTO, może w wersji 9.5? – Joril

5

Nie potrzeba żadnego specjalnego połączenia/upsert polecenia.

  1. Do łączenia wierszy z jednej tabeli z drugą.

    INSERT INTO table1 
        (SELECT * FROM table2 
        WHERE name NOT IN 
         (SELECT name FROM table1)); 
    
  2. Do tworzenia nowego stołu ze starych stołów.

    CREATE TABLE new_table AS 
    (SELECT * FROM table1 
    UNION 
    SELECT * FROM table2); 
    
Powiązane problemy