บางครั้งเราอาจจะเจองานที่ต้องมีการดึงฟิลด์บางฟิลด์ของอีกตารางหนึ่งมาใส่อีกตารางหนึ่ง แต่ถ้าข้อมูลมีปริมาณมากคงไม่สามารถมานั่งกรอกด้วยมือเองได้
ตัวอย่างสถานการณ์
มี 2 ตาราง:
employee— เก็บข้อมูลพนักงาน:emp_id,name,pos_idposition— เก็บข้อมูลตำแหน่ง:pos_id,name,emp_count
เราต้องการอัปเดตฟิลด์ emp_count ในตาราง position ให้มีจำนวนพนักงานในแต่ละตำแหน่ง
Step 1: นับจำนวนพนักงานแต่ละตำแหน่ง
SELECT pos_id, COUNT(*) AS emp_count
FROM employee
GROUP BY pos_id
Step 2: UPDATE โดยใช้ข้อมูลจาก SELECT
UPDATE position pos,
(SELECT pos_id, COUNT(*) AS emp_count FROM employee GROUP BY pos_id) AS emp
SET pos.emp_count = emp.emp_count
WHERE pos.pos_id = emp.pos_id
อธิบายคำสั่ง
- บรรทัดที่ 1: อัปเดตตาราง
positionตั้งชื่อย่อเป็นpos - บรรทัดที่ 2: ใส่ subquery นับจำนวนพนักงานตั้งชื่อย่อตารางเป็น
emp - บรรทัดที่ 3: นำ
emp.emp_countมาอัปเดตใส่ในpos.emp_count - บรรทัดที่ 4: กำหนดเงื่อนไขให้อัปเดตเฉพาะรหัสตำแหน่งที่ตรงกัน