UPDATE ปรับปรุงเปลี่ยนแปลงข้อมูล

ปกติแล้วคำสั่ง SQL ที่จะเปลี่ยนแปลงปรับปรุงข้อมูลใน TABLE นั้น เราก็ใช้คำสั่ง UPDATE ครับโดยมีรูปแบบคำสั่งดังนี้

UPDATE table SET field = value WHERE condition;

ซึ่งก็ไม่ได้มีอะไรยากครับ แต่เมื่อไหร่ก็ตามที่เราใช้งานไปเรื่อยๆ จะมีโจทย์ยากเข้ามาในชีวิตแน่ๆนั่นคือ จะเอาค่าจาก column อื่นๆจาก table อื่นๆ มาใช้ในการ update แบบนี้เราต้องใช้ SUB QUERY เข้ามาช่วยครับ

อย่าเพิ่งตกใจครับ ไอ้เจ้า SUB QUERY นี่ก็ไม่ใช่คำสั่งแปลกใหม่อะไรหรอกครับ มันคือการแทรก QUERY เข้าไปในคำสั่ง QUERY อีกทอดหนึ่งเท่านั้นเอง เพื่อให้มันไปหาค่ามาประเคนให้เราตามที่เราต้องการ วิธีการเชียนก็เหมือนการ SELECT เนี่ยแหละครับ แต่ต้องย้ำนิดนึงว่า ต้องเป็นคำสั่งที่คืนค่าออกมาค่าเดียวนะครับ (ก็ถ้ามีหลายค่า Server มันก็จะงงสิครับว่าเราจะให้มันเอาค่าไหนไปใช้จริงไหมครับ) สรุปว่า เมื่อเราต้องการให้ไปหาค่ามาจากอีก TABLE นึงเสียก่อนแล้วค่อยเอามาใช้ เราก็แทรกคำสั่ง SELECT เข้าไปแบบนี้ครับ

UPDATE table AS t1 SET field1 = (
SELECT field2 FROM table2 WHERE keyfield2 = t1.keyfield1
) WHERE condition;

ขยายความอีกหน่อยว่า จากรูปแบบคำสั่งที่แสดงอยู่นี้ เราจะเห็นได้ว่ารูปแบบจะคล้ายกับคำสั่ง UPDATE ทั่วไป เพียงแต่ส่วนของสิ่งที่จะนำไป UPDATE ลงใน Field นั้นจะเปลี่ยนแปลงเล็กน้อย คือ ไม่ใช่เป็นค่าที่กำหนดลงไปแบบตรงไปตรงมา แต่เป็นเรื่องที่ต้องไปค้นหามาอีกที เรามักเรียกวิธีการลักษณะกันว่า SUB QUERY หรือการค้นหาย่อย โดยมีวงเล็บเปิดปิดไว้เหมือนสมการทางคณิตศาสตร์เพื่อให้ง่ายต่อการสังเกตุและนำไปใช้งานสำหรับ Server เองด้วย

สำหรับการนำไปใช้ก็หลากหลายครับ แล้วแต่การเงื่อนไขที่ต้องการใช้งาน แต่ด้วยวิธีการแบบนี้ Server ก็จะทำงานหนักหน่อย เพราะต้องไปหาคำตอบจาก SubQuery มาใช้ไงครับ ถ้าข้อมูลมากหน่อยสั่ง Execute ไปแล้วก็ไปชงกาแฟ เดินดูวิวสักหน่อยก็เสร็จ แต่ถ้าข้อมูลมากกว่านั้นระวัง TimeOut นะครับ 55+

นี่ก็เป็นอีกตัวอย่างครับ

UPDATE agency AS a
SET start = (
    SELECT min(date)
    FROM invoice_01
    WHERE
    id = a.memid AND
    cancel<>'Y' AND
    hold = 'Y'
    GROUP BY id
) WHERE 1;

ส่วนอีกแบบนั้นน่าจะเพิ่มความเร็วในการทำงานได้บ้างโดยใช้คำสั่ง JOIN เข้ามาช่วย ก็น่าสนใจดีครับ แล้วแต่การประยุกต์ใช้ รูปแบบคำสั่งก็ประมาณนี้ครับ

UPDATE table1 t1 JOIN table2 t2 ON t1.id = t2.id SET t1.col1 = t2.col1, t1.col2 = t2.col2, ...

จบห้วนๆตามเคย สวัสดีครับ;

แสดงความคิดเห็น

0 ความคิดเห็น