การ update ข้อมูล ด้วยคำสั่ง SQL มีผลกับ Record แร
กระทู้เก่าบอร์ด อ.Yeadram

 2,522   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

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   เข้าไป   ผมโง่เอง
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 เหมือนกัน
4 @R18737
ดูไปดูมาในความต้องการของคุณอาจไม่ต้องใช้ INNER JOIN เลยด้วยซ้ำ

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)
6 @R18741
ขอบพระคุณครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2814s