Copia i dati da una colonna a un'altra colonna (che si trova in una tabella diversa)


89

Voglio copiare i dati da una colonna a un'altra colonna di un'altra tabella. Come posso fare ciò?

Ho provato quanto segue:

Update tblindiantime Set CountryName =(Select contacts.BusinessCountry From contacts) 

ma non ha funzionato.

Voglio copiare la colonna "BusinessCountry" della tabella dei contatti nella colonna "CountryName" della tabella tblindiantime.


1
Per copiare colonne da una tabella a un'altra, è necessario un qualche tipo di relazione tra le tabelle. Le due tabelle hanno un ID comune?
mdma

1
Quale database e versione stai usando?
Mark Byers

Risposte:


89

In SQL Server 2008 è possibile utilizzare un aggiornamento multi-tabella come segue:

UPDATE tblindiantime 
SET tblindiantime.CountryName = contacts.BusinessCountry
FROM tblindiantime 
JOIN contacts
ON -- join condition here

È necessaria una condizione di join per specificare quale riga deve essere aggiornata.

Se la tabella di destinazione è attualmente vuota, è necessario utilizzare invece un INSERT:

INSERT INTO tblindiantime (CountryName)
SELECT BusinessCountry FROM contacts

1
Ciao thanksx per il tuo rappresentante ma mi mostra il seguente errore Impossibile inserire il valore NULL nella colonna "IndianTime", tabella "tqms.dbo.tblindiantime"; la colonna non consente valori nulli. INSERT fallisce. La dichiarazione è stata interrotta.
Amit Patil

2
@AmitPatil - So che questo è vecchio ma potrebbe aiutare qualcuno come te. Usa ISNULL (contacts.BusinessCountry, '') invece di solo contacts.BusinessCountry e dovrebbe risolvere il tuo problema. Fondamentalmente stiamo sostituendo null con una stringa vuota.
Ankur-m

1
Poiché in questo esempio non mostra ciò che un "join condizione" potrebbe essere, si veda anche la risposta di Michael Pakhantsov, e la risposta di cedrikdlb , e la risposta di Parveen a una domanda simile, dove due colonne devono essere confrontati per ritirare l'riga corretta .
ToolmakerSteve

152

Qui la domanda:

Stessa tabella:

UPDATE table_name 
SET column1 = column2

Tabella diversa:

UPDATE table_name1 
    SET column1 = (
        SELECT column2
        FROM table_name2
        WHERE table_name1.id = table_name2.id
    );

13
È sbagliato nel contesto della domanda, dove il richiedente coinvolge specificamente 2 tabelle.
bPratik

2
Il suo funzionamento per mysql nel caso in cui le colonne siano relative alla stessa tabella.
Satish Pandey

11
Questo tuttavia risolve il mio problema, e sono arrivato qui attraverso il titolo della domanda che probabilmente corrisponde a questa risposta più di quanto corrisponda ai dettagli nella domanda!
Rob Grant,

6
Questa risposta risponde al titolo della domanda, piuttosto che alla domanda stessa. Tuttavia, l'ho trovato utile per quello che stavo cercando di fare.
wizard07KSU

1
questa è un'ottima risposta; mi ha aiutato a copiare solo una colonna dal mio backup alla tabella principale!
Zelter Ady

22

Table2.Column2 => Table1.Column1

Mi rendo conto che questa domanda è vecchia ma la risposta accettata non ha funzionato per me. Per i futuri googler, questo è ciò che ha funzionato per me:

UPDATE table1 
    SET column1 = (
        SELECT column2
        FROM table2
        WHERE table2.id = table1.id
    );

Per cui:

  • table1 = tabella che ha la colonna che deve essere aggiornata
  • table2 = tabella che ha la colonna con i dati
  • colonna1 = colonna vuota che richiede i dati dalla colonna2 (questa è nella tabella1)
  • colonna2 = colonna che contiene i dati (che è nella tabella2)

1
Ha funzionato per me - ma è uguale alla risposta di cui sopra[Michael Pakhantsov]
Don Cheadle

3
Hai ragione, @mmcra, che ora è la stessa della risposta sopra. Tuttavia, non era lo stesso al momento in cui avevo scritto questo commento. Noterai che è stato modificato a settembre e gli errori sono stati corretti. Avevo scritto questo commento a giugno.
Kenny Grage

16

Spero che il campo chiave sia due tabelle.

 UPDATE tblindiantime t
   SET CountryName = (SELECT c.BusinessCountry 
                     FROM contacts c WHERE c.Key = t.Key 
                     )

1
questo è valido solo se si sostituisce un campo con un altro campo, verrà generato ORA-01427: single-row subquery returns more than one rowse la selezione restituisce più di una riga, cosa succede se voglio selezionare più di una riga e aggiornare la colonna con questi valori?
Muhammad Ramahy

3
@ Muhammad Ramahy, hai una tabella nidificata nella colonna di aggiornamento? nella sottoquery restituisce diverse righe, quindi Key non è PrimaryKey per la tabella dei contatti. Se hai una chiave primaria composita, hai solo bisogno delle condizioni per la clausola WHERE.
Michael Pakhantsov

1
Non capisco cosa intendi con "Spero che il campo chiave sia due tavoli"
Marco Lackovic

2
@Krige - Apparentemente significa "Se le due tabelle hanno un campo chiave condiviso per identificare quale riga di ogni tabella corrisponde alla riga dell'altra tabella" . In caso contrario, è necessario modificare ciò che è dopo WHERE. Ad esempio, se tblindiantime ha field ContactID, che è il campo IDdella riga a contactscui appartiene ogni riga in tblindiantime, allora useresti WHERE tblindiantime.ContactID=contacts.ID. Vedi la risposta di cedrikdlb per un'altra variazione.
ToolmakerSteve

8

La risposta di una domanda simile ha funzionato più correttamente per me rispetto alla risposta selezionata a questa domanda (da Mark Byers). Usando la risposta di Mark, la mia colonna aggiornata ha ottenuto lo stesso valore in tutte le righe (forse il valore della prima riga che corrisponde al join). Utilizzando la risposta di ParveenaArora dall'altro thread, la colonna è stata aggiornata con i valori corretti.

Trasformando la soluzione di Parveena per utilizzare i nomi delle tabelle e delle colonne di questa domanda, la query sarebbe la seguente (dove presumo che le tabelle siano correlate tramite tblindiantime.contact_id):

UPDATE tblindiantime
SET CountryName = contacts.BusinessCountry
FROM contacts
WHERE tblindiantime.contact_id = contacts.id;

3

Penso che tutte le risposte precedenti siano corrette, questo codice sottostante è molto valido specialmente se devi aggiornare più righe contemporaneamente, nota: è PL / SQL

DECLARE
    CURSOR myCursor IS 
      Select contacts.BusinessCountry 
      From contacts c WHERE c.Key = t.Key;
    ---------------------------------------------------------------------
BEGIN
    FOR resultValue IN myCursor LOOP
        Update tblindiantime t
        Set CountryName=resultValue.BusinessCountry 
        where t.key=resultValue.key;
    END LOOP;
END;

Vorrei che questo potesse aiutare.


2

Ora è più facile con Management Studio 2016.

Utilizzo di SQL Server Management Studio

Per copiare i dati da una tabella a un'altra

1.Aprire la tabella con le colonne che si desidera copiare e quella in cui si desidera copiare facendo clic con il pulsante destro del mouse sulle tabelle, quindi facendo clic su Design .

2.Fare clic sulla scheda della tabella con le colonne che si desidera copiare e selezionare quelle colonne.

3. Dal menu Modifica , fare clic su Copia .

4.Aprire una nuova finestra dell'editor di query.

5.Fare clic con il pulsante destro del mouse sull'editor di query, quindi fare clic su Progetta query nell'editor .

6.Nella finestra di dialogo Aggiungi tabella , selezionare la tabella di origine e di destinazione, fare clic su Aggiungi , quindi chiudere la finestra di dialogo Aggiungi tabella .

7. Fare clic con il pulsante destro del mouse su un'area aperta dell'Editor di query, scegliere Modifica tipo , quindi fare clic su Inserisci risultati .

8.Nella finestra di dialogo Scegli tabella di destinazione per risultati di inserimento , selezionare la tabella di destinazione.

9.Nella parte superiore di Query Designer, fare clic sulla colonna di origine nella tabella di origine.

10. Il Query Designer ha ora creato una query INSERT. Fare clic su OK per inserire la query nella finestra dell'editor di query originale.

11.Eseguire la query per inserire i dati dalla tabella di origine alla tabella di destinazione.

Per ulteriori informazioni https://docs.microsoft.com/en-us/sql/relational-databases/tables/copy-columns-from-one-table-to-another-database-engine


1

Può essere risolto utilizzando un attributo diverso.

  • Utilizzare l'evento clic di controllo della cella.
  • Seleziona il valore della colonna che trasponi in un'altra colonna.
  • invia il valore selezionato a un'altra casella di testo o livello qualsiasi cosa tu riempia conveniente e un pulsante complementare per modificare la proprietà selezionata.
  • aggiorna l'intero stack del database e crea un algoritmo con query sql per superare questo per trasporlo in un'altra colonna.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.