SQL กำหนดค่าของคอลัมน์หนึ่งเท่ากับค่าของคอลัมน์อื่นในตารางเดียวกัน


97

ฉันมีตารางที่มี DATETIME สองคอลัมน์

หนึ่งในนั้นไม่เคยเป็นโมฆะ แต่บางครั้งก็เป็นโมฆะ

ฉันต้องเขียนแบบสอบถามซึ่งจะตั้งค่าแถว NULL ทั้งหมดสำหรับคอลัมน์ B ให้เท่ากับค่าในคอลัมน์ A

ฉันได้ลองใช้ตัวอย่างนี้แล้วแต่ SQL ในคำตอบที่เลือกไม่ทำงานเนื่องจาก MySQL Workbench ดูเหมือนจะไม่ชอบ FROM ใน UPDATE

คำตอบ:




21

ฉันจะทำแบบนี้:

UPDATE YourTable SET B = COALESCE(B, A);

COALESCE เป็นฟังก์ชันที่ส่งคืนอาร์กิวเมนต์แรกที่ไม่ใช่ค่าว่าง

ในตัวอย่างนี้ถ้า B บนแถวที่กำหนดไม่เป็นโมฆะการอัปเดตจะเป็น no-op

ถ้า B เป็นโมฆะ COALESCE จะข้ามไปและใช้ A แทน


5

ฉันไม่คิดว่าตัวอย่างอื่นคือสิ่งที่คุณกำลังมองหา หากคุณเพิ่งอัปเดตคอลัมน์หนึ่งจากคอลัมน์อื่นในตารางเดียวกันคุณควรจะใช้สิ่งนี้ได้

update some_table set null_column = not_null_column where null_column is null

1

นี่คือโค้ดตัวอย่างที่อาจช่วยคุณจัดการคอลัมน์ A ถึงคอลัมน์ B:

UPDATE YourTable
SET ColumnB = ColumnA
WHERE
ColumnB IS NULL
AND ColumnA IS NOT NULL;

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