2010-07-29 16 views
59

Voglio copiare i dati da una colonna a un'altra colonna di un'altra tabella. Come lo posso fare?Copia i dati da una colonna all'altra colonna (che si trova in un'altra tabella)

ho provato la seguente:

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.

+0

Per copiare le colonne da un tavolo all'altro, è necessario un qualche tipo di relazione tra i tavoli. Le due tabelle hanno un ID comune? – mdma

+0

Quale database e versione stai utilizzando? –

risposta

60

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 

Hai bisogno di una condizione di join per specificare quale riga deve essere aggiornato.

Se la tabella di destinazione è vuoto, allora si dovrebbe utilizzare un INSERT invece:

INSERT INTO tblindiantime (CountryName) 
SELECT BusinessCountry FROM contacts 
+0

Ciao grazie per il tuo rappresentante ma mi sta mostrando l'errore seguente Impossibile inserire il valore NULL nella colonna 'IndianTime', tabella 'tqms.dbo.tblindiantime'; la colonna non consente null. INSERT fallisce. La dichiarazione è stata chiusa. –

+1

@AmitPatil - So che questo è vecchio ma può aiutare qualcuno come te. Usa ISNULL (contacts.BusinessCountry, '') invece di solo contatti.BusinessCountry e dovrebbe risolvere il tuo problema. Sostituiamo sostanzialmente null con una stringa vuota. –

+0

Poiché questo esempio non mostra cosa potrebbe essere una "condizione di join", vedi anche la risposta di Michael Pakhantsov e [la risposta di cedrikdlb] (http://stackoverflow.com/a/25674132/199364) e [la risposta di Parveen a un domanda simile, in cui due colonne devono essere confrontate per scegliere la riga corretta] (http://stackoverflow.com/a/17350703/199364). – ToolmakerSteve

12

speranza si dispone di campo chiave è di due tavoli.

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

questo è valido solo se si sostituisce un campo con un altro campo verrà gettato 'ORA-01427: subquery a riga singola restituisce più di una riga' se la selezione restituisce più di una riga, cosa succede se si desidera selezionare più di una fila e aggiorna la colonna con questi valori? –

+2

@Muhammad Ramahy, hai una tabella annidata nella colonna di aggiornamento? nel sottoquery restituisce più righe, quindi Key non è PrimaryKey per la tabella dei contatti. Se hai una chiave primaria composita hai solo bisogno di condizioni per la clausola WHERE. –

+0

Codice perfetto, spero che questo sia accettato risposta –

101

Qui la query:

stessa tabella:

UPDATE table_name 
SET column1 = column2 

diverso Tabella:

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

È sbagliato nel contesto della domanda, in cui il richiedente coinvolge specificamente 2 tabelle. – bPratik

+1

Il suo funzionamento per mysql in caso di colonne si riferisce alla stessa tabella. –

+9

Questo comunque risolve il mio problema, e sono arrivato qui attraverso il titolo della domanda che probabilmente corrisponde a questa risposta più di quanto corrisponda al dettaglio nella domanda! –

1

Penso che tutte le risposte precedenti sono corrette, questo qui di seguito il codice è molto valido specialmente se devi aggiornare più righe contemporaneamente, nota: è PL/S QL

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 essere d'aiuto.

7

A similar question's answer ha funzionato più correttamente per me di this question's selected answer (di Mark Byers). Utilizzando 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). L'uso della risposta di ParveenaArora dall'altro thread ha aggiornato la colonna con i valori corretti.

Trasformare la soluzione di Parveena di utilizzare questa domanda' di tabelle e colonne nomi, la query sarà il seguente (dove presumo le tabelle sono correlate attraverso tblindiantime.contact_id):

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

Esso può essere risolto utilizzando attributo diverso

  • Utilizzare l'evento di controllo della cella.
  • Seleziona il valore della colonna che trasponi in un'altra colonna.
  • invia il valore selezionato all'altra casella di testo o livello qualsiasi cosa riempire conveniente e un pulsante complementare per modificare la proprietà selezionata.
  • aggiorna l'intero stack sul database e crea un algoritmo con query sql per superare questo per trasporlo nell'altra colonna.
13

Table2.Column2 => table1.column1

Mi rendo conto che questa domanda è vecchio, ma la risposta accettata non ha funzionato per me. Per Googler future, questo è ciò che ha funzionato per me:

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

Per cui:

  • table1 = tavolo che ha la colonna che deve essere aggiornato
  • Table2 = tabella che ha la colonna con il dati
  • column1 = colonna vuota che richiede i dati da column2 (questo è nella tabella 1)
  • column2 = colonna che ha i dati (cioè in table2)
+0

Ha funzionato per me - ma è uguale alla risposta di cui sopra '[Michael Pakhantsov]' – mmcrae

+1

Hai ragione, @mmcra, che ora è uguale alla risposta sopra. Tuttavia, non era lo stesso al momento in cui avevo scritto questo commento. Noterai che è stato modificato in settembre e gli errori sono stati corretti. Ho scritto questo commento a giugno. –

0

ora è più facile con la gestione dello studio 2016.

Utilizzando SQL Server Management Studio

Per copiare i dati da una tabella all'altra

1.Open la tabella con le colonne che si desidera copiare e quello che si desidera copiare facendo clic con il pulsante destro del mouse sulle tabelle e quindi facendo clic su Design.

2. Fare clic sulla scheda per la 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 di Query Editor.

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

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

7.Right clic su un'area aperta del l'editor di query, scegliere Modifica tipo, e quindi fare clic su Insert Risultati.

8.Nella Scegliere la tabella di destinazione per la finestra di dialogo Inserisci risultati, selezionare la tabella di destinazione.

9.Nella parte superiore di Progettazione query, fare clic sulla colonna di origine nella tabella di origine.

10. La Progettazione query ha ora creato una query INSERT. Fare clic su OK per posizionare 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

Problemi correlati