2011-11-11 8 views
7

Qual è l'approccio migliore per aggiungere una colonna a una tabella esistente con i valori da un join ... Per esempio:Aggiunta di una nuova colonna con i dati da un join

Se mi unisco alla Tabella A Tabella B .. .

Select 
A.Column1, 
A.Column2, 
B.Column1, 
B.Column2, 
B.Column3 
FROM A 
INNER JOIN B 
ON A.Column1 = B.Column2 

Fondamentalmente voglio solo copiare la colonna esistente nella tabella B oltre alla Tabella a, come posso aggiungere nuove A.Column3 alla tabella a per abbinare B.Column3 basato sul aderire?

risposta

1

Per prima cosa utilizzare il comando alter table per aggiungere la nuova colonna.

Afterwords utilizzano aggiornamento comando per mettere i valori di B nella colonna creato in A.

3

Si noti che questo è probabilmente non più efficace metodo

alter table A add column3 [yourdatatype]; 

update A set column3 = (select column3 from B where A.Column1 = B.Column2) 
    where exists (select column3 from B where A.Column1 = B.Column2) 
-2

È possibile effettuare una nuova tabella utilizzando la dichiarazione INSERT:

INSERT INTO 
    NEW_A 
SELECT 
    A.*, 
    B.Column3 
FROM A 
    INNER JOIN B 
    ON A.Column1 = B.Column2 
+0

si vuole aggiungere a una tabella esistente. –

+1

Grazie Hamikzo. Ha funzionato alla grande – dorianpc

16

Prova questo:

alter table A add column3 datatype 

update A 
set column3 = B.column3 
from A inner join B on A.Column1 = B.Column2 
+5

L'utilizzo di 'from A inner join B' è * significativamente * più lento di un semplice' da B dove A.Column1 = B.Column2' clausola su Postgres. (Non sono sicuro che il primo funzioni affatto, non ha mai completato per me.) –

0

Si può fare questo:

alter A add column3 datatype; 

update A 
inner join (select column2 ,column3, count(*) as cnt from B group by column2) b 
on A.column1 = b.column2 set 
A.column3 = b.column3; 
Problemi correlati