การ 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

4 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 นี้นะ ไม่ใช่ทั้งตาราง
      จริงๆ จะตั้งชื่อว่าอย่างไรก็ได้ครับ


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: