Verileri bir sütundan diğer sütuna kopyalayın (farklı bir tablodadır)


89

Verileri bir sütundan başka bir tablonun başka bir sütununa kopyalamak istiyorum. Bunu nasıl yapabilirim?

Aşağıdakileri denedim:

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

Ama çalışmadı.

İletişim tablosunun "BusinessCountry" sütununu tblindiantime tablosunun "CountryName" sütununa kopyalamak istiyorum.


1
Sütunları bir tablodan diğerine kopyalamak için, tablolar arasında bir tür ilişkiye ihtiyacınız vardır. İki tablonun ortak bir kimliği var mı?
mdma

1
Hangi veritabanı ve sürümü kullanıyorsunuz?
Mark Byers

Yanıtlar:


89

SQL Server 2008'de çoklu tablo güncellemesini aşağıdaki gibi kullanabilirsiniz:

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

Hangi satırın güncelleneceğini belirtmek için bir birleştirme koşuluna ihtiyacınız var.

Hedef tablo şu anda boşsa, bunun yerine bir INSERT kullanmalısınız:

INSERT INTO tblindiantime (CountryName)
SELECT BusinessCountry FROM contacts

1
Merhaba, ur rep için teşekkürler ama bana aşağıdaki hatayı gösteriyor NULL değeri 'IndianTime' sütununa, 'tqms.dbo.tblindiantime' tablosuna eklenemiyor; sütun boş değerlere izin vermez. INSERT başarısız. Açıklama sona erdirildi.
Amit Patil

2
@AmitPatil - Bunun eski olduğunu biliyorum ama senin gibi birine yardımcı olabilir. Yalnızca Contacts.BusinessCountry yerine ISNULL (Contacts.BusinessCountry, '') kullanın ve sorununuzu çözmelidir. Temelde null'u boş bir dizeyle değiştiriyoruz.
Ankur-m

1
Bu örnek, bir "birleşim koşulu" göstermek olmadığından olabilir, ayrıca Michael Pakhantsov yanıtını görmek ve cedrikdlb cevabı ve iki sütun doğru satır almaya karşılaştırılması gerekir benzer bir sorusuna parveen cevabı .
ToolmakerSteve

153

İşte sorgu:

Aynı Tablo:

UPDATE table_name 
SET column1 = column2

Farklı Masa:

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

13
Soruyu soranın özellikle 2 tablo içerdiği soru bağlamında yanlıştır.
bPratik

2
Sütun olması durumunda mysql için çalışması aynı tablo ile ilgilidir.
Satish Pandey

11
Ancak bu benim sorunumu çözüyor ve bu yanıta muhtemelen sorudaki ayrıntıyla eşleştiğinden daha fazla eşleşen soru başlığından geçtim!
Rob Grant

6
Bu cevap, sorunun kendisinden ziyade sorunun başlığını yanıtlar. Yine de bunu yapmaya çalıştığım şey için faydalı buldum.
wizard07KSU

1
bu mükemmel bir cevap; yedeklememden ana tabloya yalnızca bir sütun kopyalamama yardımcı oldu!
Zelter Ady

22

Table2.Column2 => Table1.Column1

Bu sorunun eski olduğunun farkındayım ama kabul edilen cevap benim için işe yaramadı. Gelecekteki Google çalışanları için bu benim için işe yarayan şeydi:

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

Vasıtasıyla:

  • table1 = güncellenmesi gereken sütunu içeren tablo
  • table2 = verileri içeren sütuna sahip tablo
  • sütun1 = sütun2'deki verilere ihtiyaç duyan boş sütun (bu tablo1'de)
  • sütun2 = verilere sahip sütun (tablo2'de bulunan)

1
Benim için çalıştı - ancak yukarıdaki yanıtla aynı[Michael Pakhantsov]
Don Cheadle

3
Haklısın @mmcra, artık yukarıdaki cevapla aynı. Ancak, bu yorumu yazdığım zaman aynı değildi. Eylül'de düzenlendiğini ve hataların düzeltildiğini fark edeceksiniz. Bu yorumu Haziran ayında yazmıştım.
Kenny Grage

16

Umarım anahtar alanınız iki tablodur.

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

1
bu yalnızca bir alanı başka bir alanla değiştirirseniz geçerli ORA-01427: single-row subquery returns more than one rowolur, seçim birden fazla satır döndürürse atar, ya birden fazla satır seçmek ve sütunu bu değerlerle güncellemek istersem?
Muhammed Bekette

3
@Muhammad Ramahy, güncelleme sütununda iç içe geçmiş tablonuz var mı? alt sorguda birkaç satır döndürür, ardından Anahtar, kişiler tablosu için PrimaryKey değildir. Bileşik birincil anahtarınız varsa, yalnızca WHERE yan tümcesine koşullara ihtiyacınız vardır.
Michael Pakhantsov

1
"Umarım anahtar alanınız iki
masadır

2
@Krige - Görünüşe göre "İki tablonun, her tablonun hangi satırının diğer tablonun satırıyla eşleştiğini belirlemek için paylaşılan bir Anahtar alanı varsa" anlamına gelir . Eğer yapmazsan, sonrasını değiştirmen gerekir WHERE. Tblindiantime alan varsa Örneğin, ContactIDolduğunu IDsıranın içinde contactshangi tblindiantime her satır ile aittir, o zaman kullanırsınız WHERE tblindiantime.ContactID=contacts.ID. Başka bir varyasyon için cedrikdlb'in cevabına bakınız .
ToolmakerSteve

8

Benzer bir sorunun cevabı benim için bu sorunun seçilen cevabından (Mark Byers tarafından) daha doğru çalıştı . Mark'ın cevabını kullanarak, güncellenmiş sütunum tüm satırlarda aynı değeri aldı (belki birleşimle eşleşen ilk satırdaki değer). ParveenaArora'nın diğer başlıktaki cevabını kullanmak, sütunu doğru değerlerle güncelledi.

Parveena'nın çözümünü bu sorunun 'tablo ve sütun adlarını kullanacak şekilde dönüştürürsek, sorgu aşağıdaki gibi olacaktır (tabloların tblindiantime.contact_id aracılığıyla ilişkili olduğunu varsayıyorum):

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

3

Önceki tüm cevapların doğru olduğunu düşünüyorum, bu aşağıdaki kod, aynı anda birden fazla satırı güncellemeniz gerekiyorsa özellikle geçerlidir, not: 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;

Bunun yardımcı olmasını dilerdim.


2

Management Studio 2016 ile artık daha kolay.

SQL Server Management Studio'yu Kullanma

Verileri bir tablodan diğerine kopyalamak için

1. Tablolara sağ tıklayıp ardından Tasarım'a tıklayarak kopyalamak istediğiniz ve kopyalamak istediğiniz sütunların bulunduğu tabloyu açın .

2. Kopyalamak istediğiniz sütunların bulunduğu tablonun sekmesine tıklayın ve bu sütunları seçin.

3. Düzen menüsünden Kopyala'yı tıklayın .

4. Yeni bir Sorgu Düzenleyicisi penceresi açın.

5. Sorgu Düzenleyicisine sağ tıklayın ve ardından Düzenleyicide Sorgu Tasarla seçeneğine tıklayın .

6. Tablo Ekle iletişim kutusunda, kaynak ve hedef tabloyu seçin, Ekle'ye tıklayın ve ardından Tablo Ekle iletişim kutusunu kapatın .

7. Sorgu Düzenleyicisi'nin açık bir alanını sağ tıklayın, Türü Değiştir'in üzerine gelin ve Sonuçları Ekle'yi tıklayın .

8. Sonuçları Eklemek İçin Hedef Tablo Seç iletişim kutusunda, hedef tabloyu seçin.

9. Sorgu Tasarımcısının üst kısmında, kaynak tablodaki kaynak sütununa tıklayın.

10. Sorgu Tasarımcısı şimdi bir INSERT sorgusu oluşturdu. Sorguyu orijinal Sorgu Düzenleyicisi penceresine yerleştirmek için Tamam'ı tıklayın.

11. Verileri kaynak tablodan hedef tabloya eklemek için sorguyu yürütün.

Daha Fazla Bilgi İçin https://docs.microsoft.com/en-us/sql/relational-databases/tables/copy-columns-from-one-table-to-another-database-engine


1

Farklı öznitelikler kullanılarak çözülebilir.

  • Hücre Kontrol tıklama olayını kullanın.
  • Başka bir sütuna aktaracağınız sütun değerini seçin.
  • seçili değeri başka bir metin kutusuna veya uygun şekilde doldurduğunuz seviyeye gönderin ve seçilen özelliği değiştirmek için tamamlayıcı bir düğme.
  • veritabanının tamamını güncelleyin ve bunun üstesinden gelmek için sql sorgusu ile bir algoritma yapın ve onu başka bir sütuna aktarın.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.