Kopieren Sie Daten von einer Spalte in eine andere Spalte (die sich in einer anderen Tabelle befindet).

87

Ich möchte Daten von einer Spalte in eine andere Spalte einer anderen Tabelle kopieren. Wie kann ich das machen?

Ich habe folgendes versucht:

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

aber es hat nicht funktioniert.

Ich möchte die Spalte "BusinessCountry" der Kontakttabelle in die Spalte "CountryName" der Tabelle tblindiantime kopieren.

Amit Patil
quelle
1
Um Spalten von einer Tabelle in eine andere zu kopieren, benötigen Sie eine Beziehung zwischen den Tabellen. Haben die beiden Tabellen eine gemeinsame ID?
Mdma
1
Welche Datenbank und Version verwenden Sie?
Mark Byers

Antworten:

86

In SQL Server 2008 können Sie ein Update mit mehreren Tabellen wie folgt verwenden:

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

Sie benötigen eine Verknüpfungsbedingung, um anzugeben, welche Zeile aktualisiert werden soll.

Wenn die Zieltabelle derzeit leer ist, sollten Sie stattdessen ein INSERT verwenden:

INSERT INTO tblindiantime (CountryName)
SELECT BusinessCountry FROM contacts
Mark Byers
quelle
1
Hallo danke für deine Wiederholung, aber es zeigt mir folgenden Fehler. Der Wert NULL kann nicht in die Spalte 'IndianTime', Tabelle 'tqms.dbo.tblindiantime' eingefügt werden. Spalte erlaubt keine Nullen. INSERT schlägt fehl. Die Anweisung wurde beendet.
Amit Patil
2
@AmitPatil - Ich weiß, dass dies alt ist, kann aber jemandem wie Ihnen helfen. Verwenden Sie ISNULL (contacts.BusinessCountry, '') anstelle von contacts.BusinessCountry und es sollte Ihr Problem lösen. Grundsätzlich ersetzen wir null durch eine leere Zeichenfolge.
Ankur-m
1
Da in diesem Beispiel zeigt nicht , was eine „Join - Bedingung“ auch sein mag, auch Michael Pakhantsov Antwort und cedrikdlb Antwort und Parveen Antwort auf eine ähnliche Frage, wo zwei Spalten verglichen werden müssen , die richtige Zeile zu holen .
ToolmakerSteve
148

Hier die Abfrage:

Gleiche Tabelle:

UPDATE table_name 
SET column1 = column2

Unterschiedliche Tabelle:

UPDATE table_name1 
    SET column1 = (
        SELECT column2
        FROM table_name2
        WHERE table_name1.id = table_name2.id
    );
Nalan Madheswaran
quelle
13
Ist im Kontext der Frage falsch, bei der der Fragesteller speziell 2 Tabellen einbezieht.
bPratik
2
Die Funktion für MySQL im Fall von Spalten bezieht sich auf dieselbe Tabelle.
Satish Pandey
11
Dies löst jedoch mein Problem, und ich bin durch den Fragentitel hierher gekommen, der wahrscheinlich mehr mit dieser Antwort übereinstimmt als mit dem Detail in der Frage!
Rob Grant
6
Diese Antwort beantwortet eher den Titel der Frage als die Frage selbst. Trotzdem fand ich das nützlich für das, was ich versuchte zu tun.
wizard07KSU
1
Dies ist eine ausgezeichnete Antwort. Es hat mir geholfen, nur eine Spalte aus meinem Backup in die Haupttabelle zu kopieren!
Zelter Ady
22

Table2.Column2 => Table1.Column1

Mir ist klar, dass diese Frage alt ist, aber die akzeptierte Antwort hat bei mir nicht funktioniert. Für zukünftige Googler hat dies für mich funktioniert:

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

Wodurch:

  • table1 = Tabelle mit der Spalte, die aktualisiert werden muss
  • table2 = Tabelle mit der Spalte mit den Daten
  • Spalte1 = leere Spalte, die die Daten aus Spalte2 benötigt (dies ist in Tabelle1)
  • Spalte2 = Spalte mit den Daten (in Tabelle2)
Kenny Grage
quelle
1
Arbeitete für mich - aber ist das gleiche wie oben Antwort von[Michael Pakhantsov]
Don Cheadle
3
Sie haben Recht, @mmcra, dass es jetzt die gleiche Antwort wie oben ist. Es war jedoch nicht dasselbe zu der Zeit, als ich diesen Kommentar geschrieben hatte. Sie werden feststellen, dass es im September bearbeitet wurde und die Fehler behoben wurden. Ich hatte diesen Kommentar im Juni geschrieben.
Kenny Grage
16

Ich hoffe, Sie haben ein Schlüsselfeld mit zwei Tabellen.

 UPDATE tblindiantime t
   SET CountryName = (SELECT c.BusinessCountry 
                     FROM contacts c WHERE c.Key = t.Key 
                     )
Michael Pakhantsov
quelle
1
Dies ist nur gültig, wenn Sie ein Feld durch ein anderes ersetzen. Es wird ausgelöst, ORA-01427: single-row subquery returns more than one rowwenn die Auswahl mehr als eine Zeile zurückgibt. Was ist, wenn ich mehr als eine Zeile auswählen und die Spalte mit diesen Werten aktualisieren möchte?
Muhammad Ramahy
3
@ Muhammad Ramahy, Haben Sie eine verschachtelte Tabelle in der Update-Spalte? Wenn in der Unterabfrage mehrere Zeilen zurückgegeben werden, ist der Schlüssel nicht der Primärschlüssel für die Kontakttabelle. Wenn Sie einen zusammengesetzten Primärschlüssel haben, benötigen Sie nur Bedingungen für die WHERE-Klausel.
Michael Pakhantsov
1
Ich verstehe nicht, was Sie mit "Hoffe, Sie haben Schlüsselfeld ist zwei Tabellen"
Marco Lackovic
2
@Krige - Er meint anscheinend "Wenn die beiden Tabellen ein gemeinsames Schlüsselfeld haben, um zu identifizieren, welche Zeile jeder Tabelle mit der Zeile der anderen Tabelle übereinstimmt" . Wenn Sie dies nicht tun, müssen Sie ändern, was danach ist WHERE. Wenn tblindiantime beispielsweise ein Feld hat ContactID, das IDder Zeile entspricht, zu contactsder jede Zeile in tblindiantime gehört, würden Sie verwenden WHERE tblindiantime.ContactID=contacts.ID. Siehe cedrikdlbs Antwort für eine andere Variation.
ToolmakerSteve
8

Die Antwort einer ähnlichen Frage funktionierte für mich korrekter als die ausgewählte Antwort dieser Frage (von Mark Byers). Mit Marks Antwort erhielt meine aktualisierte Spalte in allen Zeilen den gleichen Wert (möglicherweise den Wert aus der ersten Zeile, der dem Join entsprach). Durch die Verwendung der Antwort von ParveenaArora aus dem anderen Thread wurde die Spalte mit den richtigen Werten aktualisiert.

Wenn Sie Parvenenas Lösung so transformieren, dass sie die Tabellen- und Spaltennamen dieser Frage verwendet, lautet die Abfrage wie folgt (wobei ich davon ausgehe, dass die Tabellen über tblindiantime.contact_id verknüpft sind):

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

Ich denke, dass alle vorherigen Antworten korrekt sind. Dieser Code ist besonders gültig, wenn Sie mehrere Zeilen gleichzeitig aktualisieren müssen. Hinweis: Es handelt sich um 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;

Ich wünschte, das könnte helfen.

Muhammad Ramahy
quelle
2

Jetzt ist es mit Management Studio 2016 einfacher.

Verwenden von SQL Server Management Studio

Daten von einer Tabelle in eine andere kopieren

1.Öffnen Sie die Tabelle mit den Spalten, die Sie kopieren möchten, und die Spalte, in die Sie kopieren möchten, indem Sie mit der rechten Maustaste auf die Tabellen klicken und dann auf Design klicken .

2.Klicken Sie auf die Registerkarte für die Tabelle mit den Spalten, die Sie kopieren möchten, und wählen Sie diese Spalten aus.

3.Klicken Sie im Menü Bearbeiten auf Kopieren .

4.Öffnen Sie ein neues Abfrageeditorfenster.

5.Klicken Sie mit der rechten Maustaste auf den Abfrage-Editor, und klicken Sie dann im Editor auf Abfrage entwerfen .

6.Wählen Sie im Dialogfeld Tabelle hinzufügen die Quell- und Zieltabelle aus, klicken Sie auf Hinzufügen und schließen Sie das Dialogfeld Tabelle hinzufügen.

7.Klicken Sie mit der rechten Maustaste auf einen offenen Bereich des Abfrage-Editors, zeigen Sie auf Typ ändern , und klicken Sie dann auf Ergebnisse einfügen .

8.Wählen Sie im Dialogfeld Zieltabelle für Ergebnisse einfügen die Zieltabelle aus .

9.Klicken Sie im oberen Bereich des Abfrage-Designers auf die Quellenspalte in der Quelltabelle.

10. Der Abfrage-Designer hat jetzt eine INSERT-Abfrage erstellt. Klicken Sie auf OK, um die Abfrage im ursprünglichen Fenster des Abfrage-Editors zu platzieren.

11. Führen Sie die Abfrage aus, um die Daten aus der Quelltabelle in die Zieltabelle einzufügen.

Weitere Informationen finden Sie unter https://docs.microsoft.com/en-us/sql/relational-databases/tables/copy-columns-from-one-table-to-another-database-engine

Codierer
quelle
1

Es kann durch Verwendung verschiedener Attribute gelöst werden.

  • Verwenden Sie das Klickereignis "Zellensteuerung".
  • Wählen Sie den Spaltenwert aus, den Sie in eine andere Spalte transponieren möchten.
  • Senden Sie den ausgewählten Wert an ein anderes Textfeld oder eine andere Ebene, was auch immer Sie bequem füllen, und an eine ergänzende Schaltfläche, um die ausgewählte Eigenschaft zu ändern.
  • Aktualisieren Sie den gesamten Stapel in der Datenbank und erstellen Sie einen Algorithmus mit SQL-Abfrage, um diesen zu überwinden und in die andere Spalte zu übertragen.
user5204562
quelle