การ Update หรือ Delete โดย Join เงื่อนไขจากตารางอื่น

ถ้าเราต้องมีการ update หรือ delete ข้อมูลในฐานข้อมูลคราวละหลาย record ด้วยเงื่อนไขบางอย่าง ถ้าเป็นไปได้ควรจะเขียนให้ทำงานได้ด้วยคำสั่ง SQL Command เดียว หากเงื่อนไขนั้นอยู่ในตารางที่ต้องการจะลบอยู่แล้ว SQL Command ก็จะตรงไปตรงมา อย่างเช่นคำสั่ง update ก็จะเป็นประมาณนี้

update table1 set field1=0, field2='a' where field3 is null

และการ delete

delete from table1 where field3 is null

แต่หากเราต้องการ update ตาราง table1 แต่ว่าเงื่อนไขเราอยู่ในตารางอื่น หรือแม้แต่ข้อมูลที่จะมา update อยู่ในตารางอื่น
ใน SQL Server เราสามารถใช้การ join เข้ามาช่วยใน sql ได้ดังนี้

update t1 set t1.field1=0, t1.field2=t2.field2
from table1 t1 inner join table2 t2 on t1.joinfield=t2.joinfield
where t2.field3 is null

และการ delete

delete from t1
from table1 t1 inner join table2 t2 on t1.joinfield=t2.joinfield
where t2.field3 is null

12 Responses to “การ Update หรือ Delete โดย Join เงื่อนไขจากตารางอื่น”

  1. jsoft Says:

    ผมสงสัยว่าเป็น Standard SQL Syntax หรือว่าเฉพาะฐานข้อมูลครับ สอบถามไว้เป็นความรู้ครับ เพราะผมเองไม่เคยใช้

    • khunpanya Says:

      เฉพาะ Microsoft SQL Server ครับ ผมไม่แน่ใจว่าของค่ายอื่นมีตัวไหนเขียนแบบนี้หรือเปล่า แต่ที่แน่ๆ Oracle เขียนแบบนี้ไม่ได้

  2. aob Says:

    t1 t2 คืออะไรคับ

    • panya Says:

      เป็น alias ของ table เพื่อบอกว่าเรากำลังจัดการอยู่กับ alias นี้นะ ไม่ใช่ทั้งตาราง
      จริงๆ จะตั้งชื่อว่าอย่างไรก็ได้ครับ

  3. maxky Says:

    คือ update ฟิล HH = จ่ายแล้ว และเงื่อนไข คือ ถ้า ฟิล a=1 ให้ UPDATE ฟิล aa=dog
    แต่ถ้าฟิล a=2 ให้ update ฟิล aa=cat ต้องเขียน code update อย่างไรคะ แต่อยู่ใน tb เดียวกันค่ะ

    • panya Says:

      ใช้คำสั่ง case when then เข้าช่วยครับ
      update tb set aa=(case a when 1 then ‘dog’ when 2 then ‘cat’ end) ….

  4. maxky Says:

    ขอบคุณค่ะ จะลองดูนะคะอาจารย์

  5. maxky Says:

    ไม่ได้ค่ะอาจารย์ ช่วยทีค่ะ
    $sql=”UPDATE tb_book02 SET n7=’รับเรื่องแล้ว’,n8=(case ref2 when 1 then ‘น.ส.นิตยา เวฬุวนารักษ์’ when 2 then ‘น.ส.วิภาวี เทียนทอง’ end) WHERE id=$id”;

  6. maxky Says:

    ขอบคุณล่วงหน้าเลยค่ะ คริ คริ

  7. maxky Says:

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

    • panya Says:

      ไม่ได้เป็นอาจารย์ครับ
      syntax ใน sql ผิดเปล่าครับ WHERE id=$id ไม่น่าใช่
      ต้องดู error message ครับ ว่ามันเตือนเรื่องอะไร

  8. ball Says:

    UPDATE BOQ_DETAIL SET BOQ_ID = -159151 หมายความว่ายังไงครับ


Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.