Pages

12/05/2013

INNER JOIN UPDATE : Update Table with INNER JOIN

INNER JOIN UPDATE Often we may need to update a column in a table based of another column in another table.
In SQL Server you can do this using UPDATE statement by joining tables together.
To understand this better let’s take a look at below contrived example.
USE [SqlAndMe]
GO

SELECT CustomerID, Name, OrderAmount
FROM   dbo.Customers
GO

SELECT OrderID, CustomerID, Amount
FROM   dbo.Orders
GO
Result Set:
CustomerID    Name          OrderAmount
3             Curtis        NULL
4             Lanna         NULL
5             Marlin        NULL
6             Henry         NULL

(4 row(s) affected)

OrderID       CustomerID    Amount
107           6             8745.00
123           5             4582.00
643           3             5693.00

(3 row(s) affected)
In the above data I want to update OrderAmount column of dbo.Customers with values fromAmount column of dbo.Orders.
To achieve this we can use UPDATE statement as below:
UPDATE CUST
SET    CUST.OrderAmount = ORDR.Amount
FROM   dbo.Customers CUST
INNER JOIN dbo.Orders ORDR ON CUST.CustomerID = ORDR.CustomerID
GO

(3 row(s) affected)
OrderAmount column in dbo.Customers Table is now updated based on JOIN condition.
SELECT CustomerID, Name, OrderAmount
FROM   dbo.Customers
GO
CustomerID    Name          OrderAmount
3             Curtis        5693.00
4             Lanna         NULL
5             Marlin        4582.00
6             Henry         8745.00

(4 row(s) affected)

ภาษาไทย

ถ้าเราต้องมีการ update หรือ delete ข้อมูลในฐานข้อมูลคราวละหลาย record ด้วยเงื่อนไขบางอย่าง ถ้าเป็นไปได้ควรจะเขียนให้ทำงานได้ด้วยคำสั่ง SQL Command เดียว หากเงื่อนไขนั้นอยู่ในตารางที่ต้องการจะลบอยู่แล้ว SQL Command ก็จะตรงไปตรงมา อย่างเช่นคำสั่ง update ก็จะเป็นประมาณนี้
1
update table1 set field1=0, field2='a' where field3 is null
และการ delete
1
delete from table1 where field3 is null
แต่หากเราต้องการ update ตาราง table1 แต่ว่าเงื่อนไขเราอยู่ในตารางอื่น หรือแม้แต่ข้อมูลที่จะมา update อยู่ในตารางอื่น
ใน SQL Server เราสามารถใช้การ join เข้ามาช่วยใน sql ได้ดังนี้
1
2
3
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
1
2
3
delete from t1
from table1 t1 inner join table2 t2 on t1.joinfield=t2.joinfield
where t2.field3 is null

No comments: