คัดลอกข้อมูลจากคอลัมน์หนึ่งไปยังคอลัมน์อื่น (ซึ่งอยู่ในตารางอื่น)


89

ฉันต้องการคัดลอกข้อมูลจากคอลัมน์หนึ่งไปยังอีกคอลัมน์ของตารางอื่น ฉันจะทำเช่นนั้นได้อย่างไร?

ฉันลองทำสิ่งต่อไปนี้:

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

แต่มันไม่ได้ผล

ฉันต้องการคัดลอกคอลัมน์ "BusinessCountry" ของตารางที่ติดต่อไปยังคอลัมน์ "CountryName" ของตาราง tblindiantime


1
ในการคัดลอกคอลัมน์จากตารางหนึ่งไปยังอีกตารางหนึ่งคุณต้องมีความสัมพันธ์ระหว่างตาราง ทั้งสองตารางมี ID ทั่วไปหรือไม่
mdma

1
คุณใช้ฐานข้อมูลและเวอร์ชันใด
Mark Byers

คำตอบ:


89

ใน SQL Server 2008 คุณสามารถใช้การอัปเดตแบบหลายตารางได้ดังนี้:

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

คุณต้องมีเงื่อนไขการเข้าร่วมเพื่อระบุว่าควรอัปเดตแถวใด

หากตารางเป้าหมายว่างเปล่าคุณควรใช้ INSERT แทน:

INSERT INTO tblindiantime (CountryName)
SELECT BusinessCountry FROM contacts

1
สวัสดีขอบคุณสำหรับตัวแทนของคุณ แต่มันแสดงให้ฉันเห็นข้อผิดพลาดต่อไปนี้ไม่สามารถแทรกค่า NULL ในคอลัมน์ 'IndianTime', ตาราง 'tqms.dbo.tblindiantime'; คอลัมน์ไม่อนุญาตให้มีค่าว่าง INSERT ล้มเหลว คำสั่งยุติแล้ว
Amit Patil

2
@AmitPatil - ฉันรู้ว่ามันเก่า แต่อาจช่วยคนอย่างคุณได้ ใช้ ISNULL (contact.BusinessCountry, '') แทนการติดต่อเพียงอย่างเดียว BusinessCountry และควรแก้ปัญหาของคุณ โดยพื้นฐานแล้วเราจะแทนที่ null ด้วยสตริงว่าง
Ankur-m

1
เพราะเช่นนี้ไม่ได้แสดงให้เห็นว่า "การเข้าร่วมเงื่อนไข" อาจจะยังเห็นคำตอบของไมเคิล Pakhantsov และคำตอบ cedrikdlb ของและคำตอบ Parveen เพื่อคำถามที่คล้ายกันซึ่งทั้งสองคอลัมน์ที่จะต้องนำมาเปรียบเทียบเพื่อเลือกแถวที่ถูกต้อง
ToolmakerSteve

153

ที่นี่คำถาม:

ตารางเดียวกัน:

UPDATE table_name 
SET column1 = column2

ตารางที่แตกต่างกัน:

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

13
ผิดในบริบทของคำถามโดยที่ asker เกี่ยวข้องกับตาราง 2 ตารางโดยเฉพาะ
bPratik

2
มันทำงานกับ mysql ในกรณีของคอลัมน์เกี่ยวข้องกับตารางเดียวกัน
Satish Pandey

11
อย่างไรก็ตามสิ่งนี้ช่วยแก้ปัญหาของฉันได้และฉันมาที่นี่ผ่านชื่อคำถามซึ่งอาจตรงกับคำตอบนี้มากกว่าที่จะตรงกับรายละเอียดในคำถาม!
Rob Grant

6
คำตอบนี้ตอบโจทย์เรื่องคำถามแทนที่จะเป็นคำถาม ถึงกระนั้นฉันก็พบว่าสิ่งนี้มีประโยชน์สำหรับสิ่งที่ฉันพยายามทำ
wizard07KSU

1
นี่คือคำตอบที่ดีเยี่ยม มันช่วยให้ฉันคัดลอกคอลัมน์เดียวจากข้อมูลสำรองไปยังตารางหลัก!
Zelter Ady

22

Table2.Column2 => Table1.Column1

ฉันรู้ว่าคำถามนี้เก่า แต่คำตอบที่ยอมรับไม่ได้ผลสำหรับฉัน สำหรับ Googler ในอนาคตนี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน:

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

โดย:

  • table1 = ตารางที่มีคอลัมน์ที่ต้องอัปเดต
  • table2 = ตารางที่มีคอลัมน์ที่มีข้อมูล
  • column1 = คอลัมน์ว่างที่ต้องการข้อมูลจาก column2 (อยู่ใน table1)
  • column2 = คอลัมน์ที่มีข้อมูล (ที่อยู่ใน table2)

1
ทำงานให้ฉัน - แต่ก็เหมือนกับคำตอบข้างบนโดย[Michael Pakhantsov]
Don Cheadle

3
คุณพูดถูก @mmcra ว่าตอนนี้ก็เหมือนกับคำตอบข้างบน อย่างไรก็ตามมันไม่เหมือนกันในเวลาที่ฉันเขียนความคิดเห็นนี้ คุณจะสังเกตเห็นว่ามีการแก้ไขในเดือนกันยายนและข้อผิดพลาดได้รับการแก้ไขแล้ว ฉันได้เขียนความคิดเห็นนี้ในเดือนมิถุนายน
Kenny Grage

16

หวังว่าคุณจะมีคีย์ฟิลด์สองตาราง

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

1
สิ่งนี้ใช้ได้ก็ต่อเมื่อคุณแทนที่หนึ่งฟิลด์โดยฟิลด์อื่นฟิลด์หนึ่งฟิลด์จะถูกโยนORA-01427: single-row subquery returns more than one rowหากการเลือกส่งคืนมากกว่าหนึ่งแถวจะเป็นอย่างไรหากฉันต้องการเลือกมากกว่าหนึ่งแถวและอัปเดตคอลัมน์ด้วยค่าเหล่านี้
Muhammad Bekette

3
@ มูฮัมหมัดรามาฮีคุณมีตารางซ้อนในคอลัมน์อัพเดตหรือไม่? ในเคียวรีย่อยส่งคืนหลายแถวดังนั้นคีย์ไม่ใช่ PrimaryKey สำหรับตารางผู้ติดต่อ หากคุณมีคีย์หลักแบบผสมคุณเพียงแค่ต้องการเงื่อนไขสำหรับ WHERE clause
Michael Pakhantsov

1
ฉันไม่เข้าใจความหมายของคำว่า "Hope you have key field is two tables"
Marco Lackovic

2
@Krige - เขาเห็นได้ชัดว่าหมายถึง"ถ้าสองตารางมีข้อมูลสำคัญที่ใช้ร่วมกันที่จะระบุว่าแถวของแต่ละตารางตรงกับแถวของตารางอื่น ๆ" ถ้าคุณไม่ทำคุณต้องเปลี่ยนสิ่งที่เกิดขึ้นหลังจากWHEREนั้น ตัวอย่างเช่นถ้ามี tblindiantime ฟิลด์ContactIDซึ่งเป็นIDของแถวในcontactsซึ่งเป็นกับแต่ละแถวใน tblindiantime WHERE tblindiantime.ContactID=contacts.IDแล้วคุณจะใช้ ดูคำตอบของ cedrikdlbสำหรับรูปแบบอื่น
ToolmakerSteve

8

คำตอบของคำถามที่คล้ายกันทำงานได้ถูกต้องสำหรับฉันมากกว่าคำตอบที่เลือกไว้ของคำถามนี้ (โดย Mark Byers) เมื่อใช้คำตอบของ Mark คอลัมน์ที่อัปเดตของฉันจะมีค่าเท่ากันในทุกแถว (อาจเป็นค่าจากแถวแรกที่ตรงกับการรวม) การใช้คำตอบของ ParveenaArora จากเธรดอื่นจะอัปเดตคอลัมน์ด้วยค่าที่ถูกต้อง

การแปลงโซลูชันของ Parveena เพื่อใช้ชื่อตารางและคอลัมน์ของคำถามนี้การสืบค้นจะเป็นดังนี้ (โดยที่ฉันถือว่าตารางเกี่ยวข้องกันผ่าน tblindiantime.contact_id):

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

3

ฉันคิดว่าคำตอบก่อนหน้านี้ทั้งหมดถูกต้องโค้ดด้านล่างนี้ใช้ได้มากโดยเฉพาะหากคุณต้องอัปเดตหลายแถวพร้อมกันโปรดทราบว่าเป็น 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;

ฉันหวังว่าสิ่งนี้จะช่วยได้


2

ตอนนี้มันง่ายมากขึ้นด้วย management studio 2016

การใช้ SQL Server Management Studio

เพื่อคัดลอกข้อมูลจากตารางหนึ่งไปยังอีกตารางหนึ่ง

1.Open ตารางที่มีคอลัมน์ที่คุณต้องการคัดลอกและคนที่คุณต้องการที่จะคัดลอกลงโดยคลิกขวาที่ตารางแล้วคลิกออกแบบ

2. คลิกแท็บสำหรับตารางที่มีคอลัมน์ที่คุณต้องการคัดลอกและเลือกคอลัมน์เหล่านั้น

3. จากแก้ไขเมนูคลิกคัดลอก

4. เปิดหน้าต่าง Query Editor ใหม่

5.Right คลิกแก้ไขแบบสอบถามแล้วคลิกการออกแบบแบบสอบถามในบรรณาธิการ

6. ในกล่องโต้ตอบเพิ่มตารางเลือกตารางต้นทางและปลายทางคลิกเพิ่มจากนั้นปิดกล่องโต้ตอบเพิ่มตาราง

7.Right คลิกเปิดพื้นที่ของแบบสอบถามบรรณาธิการชี้ไปที่เปลี่ยนประเภทแล้วคลิกผลการแทรก

8. ในกล่องโต้ตอบเลือกตารางเป้าหมายสำหรับแทรกผลลัพธ์ให้เลือกตารางปลายทาง

9. ในส่วนบนของ Query Designer ให้คลิกคอลัมน์ต้นทางในตารางต้นทาง

10. ขณะนี้ Query Designer ได้สร้างแบบสอบถาม INSERT คลิกตกลงเพื่อวางคิวรีลงในหน้าต่าง Query Editor ดั้งเดิม

11. ดำเนินการสืบค้นเพื่อแทรกข้อมูลจากตารางต้นทางไปยังตารางปลายทาง

สำหรับข้อมูลเพิ่มเติมhttps://docs.microsoft.com/en-us/sql/relational-databases/tables/copy-columns-from-one-table-to-another-database-engine


1

สามารถแก้ไขได้โดยใช้แอตทริบิวต์ที่แตกต่างกัน

  • ใช้เหตุการณ์คลิกควบคุมเซลล์
  • เลือกค่าคอลัมน์ที่คุณเปลี่ยนเป็นคอลัมน์อับเรณู
  • ส่งค่าที่เลือกไปยังกล่องข้อความอื่นหรือระดับใดก็ตามที่คุณกรอกสะดวกและปุ่มเสริมเพื่อแก้ไขคุณสมบัติที่เลือก
  • อัปเดตสแต็กทั้งหมดบนฐานข้อมูลและสร้างอัลกอริทึมด้วยแบบสอบถาม sql เพื่อเอาชนะอันนี้เพื่อเปลี่ยนเป็นคอลัมน์อื่น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.