คัดลอกค่าจากคอลัมน์หนึ่งไปยังอีกคอลัมน์ในตารางเดียวกัน


168

ฉันจะสร้างค่าคัดลอกจากคอลัมน์หนึ่งไปยังอีกคอลัมน์ได้อย่างไร ฉันมี:

Database name: list
number | test
123456 | somedata
123486 | somedata1
232344 | 34

ฉันต้องการ:

Database name: list
number | test
123456 | 123456
123486 | 123486
232344 | 232344

ฉันควรมีแบบสอบถาม MySQL อะไร

คำตอบ:


362

คำตอบสั้น ๆ สำหรับรหัสที่เป็นปัญหาคือ:

UPDATE `table` SET test=number

นี่tableคือชื่อตารางและมันถูกล้อมรอบด้วยสำเนียงที่ร้ายแรง (aka back-ticks `) เนื่องจากนี่เป็นแบบแผน MySQL ในการหลีกเลี่ยงคำหลัก (และTABLEเป็นคำหลักในกรณีนั้น)

ระวังว่านี่เป็นแบบสอบถามที่ค่อนข้างอันตรายซึ่งจะล้างข้อมูลทุกอย่างในคอลัมน์testในทุกแถวของตารางแทนที่ด้วยnumber(โดยไม่คำนึงถึงมูลค่า)

เป็นเรื่องปกติมากที่จะใช้WHEREส่วนคำสั่งเพื่อ จำกัด คิวรีของคุณเฉพาะชุดของแถวที่ระบุเท่านั้น:

UPDATE `products` SET `in_stock` = true WHERE `supplier_id` = 10

22
มันเป็นหนึ่งในโอกาสที่หายากเหล่านั้นซึ่งนักพัฒนาคิดเหมือนฆราวาส
Zaxter

9
ระวังหากคุณไม่คุ้นเคยกับupdate command... โดยไม่ต้องWHEREประโยคคำสั่งนี้จะupdate ALLระเบียนในตาราง
gmo

ง่ายมาก! ขอบคุณ! ว้าว!
JimboSlice

1
ศักยภาพที่ร้ายแรงสำหรับการเช็ดข้อมูลจำนวนมากตามที่ @ gmo เตือนไว้ ลองทำการสำรองข้อมูลของฐานข้อมูลก่อนจากนั้นเรียกใช้แบบสอบถามด้วยส่วนคำสั่ง WHERE เพื่อ จำกัด ให้เหลือเพียงหนึ่งบรรทัด หากคุณพอใจกับผลลัพธ์ให้ลบคำสั่งย่อย WHERE
blogo

น่ากลัว ไม่ได้คิดเรื่องนั้น ขอบคุณ
Onkar Musale

28
UPDATE `table_name` SET `test` = `number`

คุณยังสามารถทำการเปลี่ยนแปลงทางคณิตศาสตร์ใด ๆ ในกระบวนการหรือใช้ฟังก์ชั่น MySQL เพื่อปรับเปลี่ยนค่า



8

ระวัง : คำสั่งของคอลัมน์การปรับปรุงเป็นสิ่งสำคัญ

ดี : สิ่งที่ฉันต้องการบันทึกค่าสถานะที่มีอยู่เป็น PrevStatus

UPDATE Collections SET  PrevStatus=Status, Status=44 WHERE ID=1487496;

BAD : สถานะ & PrevStatus ทั้งคู่จบลงด้วย 44

UPDATE Collections SET  Status=44, PrevStatus=Status WHERE ID=1487496;

ทำไมคุณถึงตั้งค่าสถานะ = 44
Sceletia

@sia lia เพียงค่าโดยพลการเพื่อแสดงปัญหา
zzapper

6

ลองต่อไปนี้:

UPDATE `list` SET `test` = `number` 

มันสร้างสำเนาของค่าทั้งหมดจาก "หมายเลข" และวางลงใน "ทดสอบ"


3

ทำงานต่อไปสำหรับฉัน ..

  1. ตรวจสอบให้แน่ใจว่าคุณไม่ได้ใช้เซฟโหมดในแอปพลิเคชันตัวแก้ไขคิวรี หากคุณปิดใช้งาน!
  2. จากนั้นเรียกใช้คำสั่ง sql ดังต่อไปนี้

สำหรับตารางที่ระบุว่า 'test_update_cmd', คอลัมน์ค่าแหล่งข้อมูล col2, คอลัมน์ค่าเป้าหมาย col1 และคอลัมน์เงื่อนไข col3: -

UPDATE  test_update_cmd SET col1=col2 WHERE col3='value';

โชคดี!


-7

คุณสามารถทำได้ด้วยขั้นตอนดังนั้นฉันจึงมีขั้นตอนนี้

 DELIMITER $$
 CREATE PROCEDURE copyTo()
       BEGIN
               DECLARE x  INT;
            DECLARE str varchar(45);
              SET x = 1;
            set str = '';
              WHILE x < 5 DO
                set  str = (select source_col from emp where id=x);
            update emp set target_col =str where id=x;      
            SET  x = x + 1;
                END WHILE;

       END$$
   DELIMITER ;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.