กระทู้เก่าบอร์ด อ.Yeadram
2,643 6
URL.หัวข้อ /
URL
การ update ข้อมูล ด้วยคำสั่ง SQL มีผลกับ Record แร
Table A Table B
Code Amount Code Amount
A-10 10 A-10 10
A-20 1000 A-10 20
A-20 1000
A-20 30
แล้วเขียนคำสั่งดังนี้
UPDATE Table A INNER JOIN Table B ON Table A.Item_code = Table B.Item_code SET Table A.Amount = [Table B]![Amount]
แล้วพบว่ามีแต่ จำนวนของ Code ตัวแรกเท่านั้น (คือ 10 และ 1000) ที่นำค่าจาก Table B ไป Update field Amount ใน Table A ทำไมค่าอื่น ๆ (คือ 20 และ 30 )จึงไม่ถูกนำไป Update
Code Amount Code Amount
A-10 10 A-10 10
A-20 1000 A-10 20
A-20 1000
A-20 30
แล้วเขียนคำสั่งดังนี้
UPDATE Table A INNER JOIN Table B ON Table A.Item_code = Table B.Item_code SET Table A.Amount = [Table B]![Amount]
แล้วพบว่ามีแต่ จำนวนของ Code ตัวแรกเท่านั้น (คือ 10 และ 1000) ที่นำค่าจาก Table B ไป Update field Amount ใน Table A ทำไมค่าอื่น ๆ (คือ 20 และ 30 )จึงไม่ถูกนำไป Update
6 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R18726
จริงๆเราจะบอกไม่ได้ว่า Access จะเอาเรคอร์ดไหนของ Table B ไปอัพเดต มันอยู่ที่ว่า Access เจอเรคอร์ดไหนก่อนหลัง ลำดับเรคอร์ดที่เจอก็ไม่มีอะไรการันตีได้ว่าเป็นลำดับเดียวกับการแสดงเรคอร์ดออกมาให้เราเห็นในเทเบิลหรือคิวรี่(ที่ไม่มีการกำหนดว่าให้เรียงลำดับการแสดงอย่างไร) คงมีแต่โปรแกรมเมอร์ของไมโครซอฟท์ที่รู้ว่ามันทำงานอย่างไรกันแน่ แล้วกรณีนี้ก็แปลว่ามันเจอ (A-10,20) ก่อน (A-10,10) ผลคือใน Table A จึงเห็นค่าจากตัวหลังเพราะมันไปทับตัวก่อนหน้าไปแล้ว
2 @R18730
ขอพระคุณมาก ได้แล้วครับ ต้องเขียนเป็นแบบนี้ครับ
UPDATE Table A INNER JOIN Table B ON Table A.Item_code = Table B.Item_code SET Table A.Amount = [Table B]![Amount] + Table A.Amount
คือเติม + Table A.Amount เข้าไป ผมโง่เอง
UPDATE Table A INNER JOIN Table B ON Table A.Item_code = Table B.Item_code SET Table A.Amount = [Table B]![Amount] + Table A.Amount
คือเติม + Table A.Amount เข้าไป ผมโง่เอง
3 @R18734
ประเด็นอยู่ที่คุณจะจัดการค่าหลายเรคคอร์ดของตาราง Table B ยังไงก่อน UPDATE เข้าตาราง Table A ซึ่งมีเรคคอร์ดเดียว ซึ่งคุณการสามารถใช้ฟังก์ชั่น DMax(), DSum(), DLast(),... จัดการข้อมูลที่ต้องการก่อน UPDATE ได้ครับ
ซึ่งหากคุณต้องการผลรวมทั้งหมดของฟิลด์ Amount ในตาราง Table B ที่ Code เหมือนกับตาราง Table A ก็ต้องเขียน SQL ประมาณนี้ครับ
UPDATE Table A INNER JOIN Table B ON Table A.Item_code = Table B.Item_code SET Table A.Amount = DSum("Amount","Table B","Item_Code = '" & Table A.Item_code & "'")
ปล. การที่คุณเขียน [Table B]![Amount] + Table A.Amount ค่าจะผิดพลาดได้เมื่อเรคคอร์ดเพิ่มขึ้น หากความต้องการของคุณหมายถึงการรวมค่า Amount ทุกเรคคอร์ดที่ค่า Code เหมือนกัน
ซึ่งหากคุณต้องการผลรวมทั้งหมดของฟิลด์ Amount ในตาราง Table B ที่ Code เหมือนกับตาราง Table A ก็ต้องเขียน SQL ประมาณนี้ครับ
UPDATE Table A INNER JOIN Table B ON Table A.Item_code = Table B.Item_code SET Table A.Amount = DSum("Amount","Table B","Item_Code = '" & Table A.Item_code & "'")
ปล. การที่คุณเขียน [Table B]![Amount] + Table A.Amount ค่าจะผิดพลาดได้เมื่อเรคคอร์ดเพิ่มขึ้น หากความต้องการของคุณหมายถึงการรวมค่า Amount ทุกเรคคอร์ดที่ค่า Code เหมือนกัน
4 @R18737
ดูไปดูมาในความต้องการของคุณอาจไม่ต้องใช้ INNER JOIN เลยด้วยซ้ำ
UPDATE Table A SET Table A.Amount = DSum("Amount","Table B","Item_Code = '" & Table A.Item_code & "'")
ปรับใช้ดูครับ
UPDATE Table A SET Table A.Amount = DSum("Amount","Table B","Item_Code = '" & Table A.Item_code & "'")
ปรับใช้ดูครับ
5 @R18738
คิดเหมือนคุณ TTT ครับ
แต่แนะนำให้ลองใช้ Sub Query ครับ
Update [Table A] As a
Set Amount =
(Select Sum(Amount)
From [Table B] As b
Where b.Item_Code = a.Item_Code)
แต่แนะนำให้ลองใช้ Sub Query ครับ
Update [Table A] As a
Set Amount =
(Select Sum(Amount)
From [Table B] As b
Where b.Item_Code = a.Item_Code)
6 @R18741
ขอบพระคุณครับ
Time: 0.3341s