Menyalin data dari satu kolom ke kolom lain (yang ada di tabel berbeda)

89

Saya ingin menyalin data dari satu kolom ke kolom lain dari tabel lain. Bagaimana saya bisa melakukan itu?

Saya mencoba yang berikut ini:

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

tapi tidak berhasil.

Saya ingin menyalin kolom "BusinessCountry" dari tabel kontak ke kolom "CountryName" dari tabel tblindiantime.

Amit Patil
sumber
1
Untuk menyalin kolom dari satu tabel ke tabel lainnya, Anda memerlukan semacam relasi antar tabel. Apakah kedua tabel memiliki ID yang sama?
mdma
1
Database dan versi apa yang Anda gunakan?
Mark Byers

Jawaban:

89

Di SQL Server 2008 Anda dapat menggunakan pemutakhiran banyak tabel sebagai berikut:

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

Anda memerlukan kondisi gabungan untuk menentukan baris mana yang harus diperbarui.

Jika tabel target saat ini kosong maka Anda harus menggunakan INSERT sebagai gantinya:

INSERT INTO tblindiantime (CountryName)
SELECT BusinessCountry FROM contacts
Mark Byers
sumber
1
Hi thankx for ur rep tetapi itu menunjukkan kepada saya kesalahan berikut Tidak dapat memasukkan nilai NULL ke dalam kolom 'IndianTime', table 'tqms.dbo.tblindiantime'; kolom tidak mengizinkan null. INSERT gagal. Pernyataan tersebut telah dihentikan.
Amit Patil
2
@AmitPatil - Saya tahu ini sudah tua tetapi dapat membantu orang seperti Anda. Gunakan ISNULL (contacts.BusinessCountry, '') daripada hanya contacts.BusinessCountry dan itu akan menyelesaikan masalah Anda. Kami pada dasarnya mengganti null dengan string kosong.
Ankur-m
1
Karena contoh ini tidak menunjukkan apa itu "kondisi penggabungan", lihat juga jawaban Michael Pakhantsov, dan jawaban cedrikdlb , dan jawaban Parveen untuk pertanyaan serupa, di mana dua kolom harus dibandingkan untuk memilih baris yang benar .
ToolmakerSteve
152

Berikut pertanyaannya:

Tabel yang Sama:

UPDATE table_name 
SET column1 = column2

Tabel yang berbeda:

UPDATE table_name1 
    SET column1 = (
        SELECT column2
        FROM table_name2
        WHERE table_name1.id = table_name2.id
    );
Nalan Madheswaran
sumber
13
Salah dalam konteks pertanyaan, dimana penanya secara khusus melibatkan 2 tabel.
bPratik
2
Ini berfungsi untuk mysql jika kolom berhubungan dengan tabel yang sama.
Satish Pandey
11
Namun ini menyelesaikan masalah saya, dan saya sampai di sini melalui judul pertanyaan yang mungkin cocok dengan jawaban ini lebih dari itu cocok dengan detail dalam pertanyaan!
Rob Grant
6
Jawaban ini menjawab judul pertanyaan, bukan pertanyaan itu sendiri. Namun, saya merasa ini berguna untuk apa yang saya coba lakukan.
wizard07KSU
1
ini adalah jawaban yang bagus; itu membantu saya untuk menyalin hanya satu kolom dari cadangan saya ke tabel utama!
Zelter Ady
22

Tabel2.Column2 => Tabel1.Column1

Saya menyadari pertanyaan ini sudah tua tetapi jawaban yang diterima tidak berhasil untuk saya. Untuk calon karyawan Google, inilah yang berhasil bagi saya:

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

Dimana:

  • table1 = tabel yang memiliki kolom yang perlu diperbarui
  • table2 = tabel yang memiliki kolom dengan data
  • kolom1 = kolom kosong yang membutuhkan data dari kolom2 (ini ada di tabel1)
  • kolom2 = kolom yang memiliki data (yaitu di tabel2)
Kenny Grage
sumber
1
Bekerja untuk saya - tetapi sama seperti jawaban di atas oleh[Michael Pakhantsov]
Don Cheadle
3
Anda benar, @mmcra, bahwa sekarang sama dengan jawaban di atas. Namun, itu tidak sama pada saat saya menulis komentar ini. Anda akan melihat bahwa itu diedit pada September dan kesalahan telah diperbaiki. Saya telah menulis komentar ini pada bulan Juni.
Kenny Grage
16

Harap Anda memiliki bidang kunci dua tabel.

 UPDATE tblindiantime t
   SET CountryName = (SELECT c.BusinessCountry 
                     FROM contacts c WHERE c.Key = t.Key 
                     )
Michael Pakhantsov
sumber
1
ini hanya berlaku jika Anda mengganti satu bidang dengan satu bidang lain itu akan membuang ORA-01427: single-row subquery returns more than one rowjika pilih mengembalikan lebih dari satu baris, bagaimana jika saya ingin memilih lebih dari satu baris dan memperbarui kolom dengan nilai-nilai ini?
Muhammad Ramahy
3
@Muhammad Ramahy, Punya tabel nested di kolom update? dalam subquery mengembalikan beberapa baris, maka Key bukanlah PrimaryKey untuk tabel kontak. Jika Anda memiliki kunci utama komposit, Anda hanya perlu ketentuan pada klausa WHERE.
Michael Pakhantsov
1
Saya tidak mengerti apa yang Anda maksud dengan "Harap Anda memiliki bidang kunci adalah dua tabel"
Marco Lackovic
2
@Krige - Dia tampaknya berarti "Jika dua tabel memiliki kolom Key bersama untuk mengidentifikasi baris mana dari setiap tabel yang cocok dengan baris tabel lainnya" . Jika tidak, maka Anda perlu mengubah apa setelahnya WHERE. Misalnya, jika tblindiantime memiliki field ContactID, yang merupakan IDbaris contactsyang dimiliki oleh setiap baris dalam tblindiantime, maka Anda akan menggunakan WHERE tblindiantime.ContactID=contacts.ID. Lihat jawaban cedrikdlb untuk variasi lain.
ToolmakerSteve
8

Jawaban pertanyaan serupa bekerja lebih tepat bagi saya daripada jawaban pilihan pertanyaan ini (oleh Mark Byers). Menggunakan jawaban Mark, kolom saya yang diperbarui mendapatkan nilai yang sama di semua baris (mungkin nilai dari baris pertama yang cocok dengan gabungan). Menggunakan jawaban ParveenaArora dari utas lain memperbarui kolom dengan nilai yang benar.

Mengubah solusi Parveena untuk menggunakan nama tabel dan kolom pertanyaan ini, kueri akan menjadi sebagai berikut (di mana saya menganggap tabel terkait melalui tblindiantime.contact_id):

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

Saya pikir semua jawaban sebelumnya benar, kode di bawah ini sangat valid terutama jika Anda harus memperbarui beberapa baris sekaligus, catatan: ini 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;

Saya berharap ini bisa membantu.

Muhammad Ramahy
sumber
2

Sekarang lebih mudah dengan studio manajemen 2016.

Menggunakan SQL Server Management Studio

Untuk menyalin data dari satu tabel ke tabel lainnya

1. Buka tabel dengan kolom yang ingin Anda salin dan yang ingin Anda salin dengan mengklik kanan tabel, lalu klik Desain .

2. Klik tab untuk tabel dengan kolom yang ingin Anda salin dan pilih kolom tersebut.

3. Dari menu Edit , klik Salin .

4. Buka jendela Editor Kueri baru.

5. Klik kanan Editor Kueri, lalu klik Kueri Desain di Editor .

6. Dalam kotak dialog Tambah Tabel , pilih tabel sumber dan tujuan, klik Tambah , lalu tutup kotak dialog Tambah Tabel .

7. Klik kanan area terbuka di Editor Kueri, arahkan ke Jenis Perubahan , lalu klik Sisipkan Hasil .

8. Di kotak dialog Pilih Tabel Target untuk Sisipkan Hasil , pilih tabel tujuan.

9. Di bagian atas Desainer Kueri, klik kolom sumber di tabel sumber.

10. Query Designer sekarang telah membuat query INSERT. Klik OK untuk menempatkan kueri ke dalam jendela Editor Kueri asli.

11. Jalankan query untuk memasukkan data dari tabel sumber ke tabel tujuan.

Untuk Informasi Lebih Lanjut https://docs.microsoft.com/en-us/sql/relational-databases/tables/copy-columns-from-one-table-to-another-database-engine

Pembuat kode
sumber
1

Ini dapat diselesaikan dengan menggunakan atribut yang berbeda.

  • Gunakan acara klik Kontrol sel.
  • Pilih nilai kolom yang Anda transpos ke kolom anter.
  • kirim nilai yang dipilih ke kotak teks lain atau tingkatkan apa pun yang Anda isi dengan nyaman dan tombol pelengkap untuk mengubah properti yang dipilih.
  • perbarui seluruh tumpukan pada database dan buat algoritma dengan query sql untuk mengatasi yang satu ini untuk memindahkannya ke kolom lain.
pengguna5204562
sumber