Pantip.com Pantip-TechExchange | Pantip-Cafe | PantipMarket.com | Chat | PanTown.com | BlogGang.com| Torakhong.org| GameRoom
 




===== ดู SQL ให้ผมหน่อยครับ =====

มี table อยู่สอง table ที่มี schema เหมือนกันเป๊ะ ๆ
แต่ละ table มี 4 fields เป็น CHAR ขนาดต่าง ๆ
4 fields ที่ว่าคือ ID NAME SNAME และ PID สำหรับเก็บ
รหัสพนักงาน ชื่อ นามสกุล และ เลขประจำตัวประชาชน
ตามลำดับ ไม่มี key

ตารางแรก EMO (ย่อมาจาก EMPLOYEE OLD)
เป็นตารางเก่า ที่มี DATA ที่ไม่ค่อย clean กล่าวคือ
ซ้ำกันก็มี บางช่องหายไปบ้างก็มี เพราะว่า ไม่มีการกำหนด key
และไม่มีการบังคับว่าแต่ละ field เป็น null ไม่ได้

ตารางที่สอง EMN (แน่นอนย่อมาจาก EMPLOYEE NEW)
ตารางนี้ DATA ที่มี clean มาก ๆ คือแม้ว่า จะไม่มี key ก็ตาม
แต่ว่า ID ก็ unique และแน่นอน PID ซึ่งเป็นเลขตามบัตรประชาชนก็
unique เช่นกัน

จุดประสงค์ของงานก็คือ เอาเจ้า EMN ไปทับ EMO นั่นเอง ง่ายๆ ไม่ยุ่งยาก
แต่ก่อนที่จะเอาไปทับ ก็อยากจะตรวจสอบข้อมูล และแยกแยะข้อมูลก่อน
กล่าวคือ ข้อมูลใดที่ ID มีใน EMN แต่ไม่มีใน EMO ก็จะเอาไป
insert ทับได้เลย อันนี้ไม่มีปัญหา ง่ายมาก

อันที่สอง ถ้าข้อมูล มีทั้งใน EMN และ EMO ก็ให้ update ทับไปอีกน่ะแหละ
โดยข้อมูลเก่า กับข้อมูลใหม่ ต้องมี id name sname เท่ากัน และ id ในข้อมูลเก่าต้อง
ไม่ซ้ำซ้อนกันเองด้วย ก่อน update ผมก็ให้มัน select record ที่ผมสนใจมาก่อน ด้วยคำสั่ง

select a.id, a.name, a.sname, a.pid from EMN as a, EMO as b
where a.id in (select id from EMO group by id having ( count(id) = 1 ))
and a.id = b.id and a.name = b.name and a.sname = b.sname


ปัญหาคือ มันนานเหลือเกิน ใช้เวลาตั้ง 20 นาทีได้ ทั้ง ๆ ที่แต่ละ table มีข้อมูลทั้งหมด
อยู่ประมาณ 20,000 records เท่านั้นเอง

แสดงว่า SQL statement ของผม เขียนได้ไม่ฉลาดเท่าไหร่
มีวิธีที่ฉลาดกว่านี้ไหมครับ


จากคุณ : Khun_Horm -[ 27 ส.ค. 50 - 10:20:50 ]




ข้อความหรือรูปภาพที่ปรากฏในกระทู้ที่ท่านเห็นอยู่นี้ เกิดจากการตั้งกระทู้และถูกส่งขึ้นกระดานข่าวโดยอัตโนมัติจากบุคคลทั่วไป ซึ่ง PANTIP.COM มิได้มีส่วนร่วมรู้เห็น ตรวจสอบ หรือพิสูจน์ข้อเท็จจริงใดๆ ทั้งสิ้น หากท่านพบเห็นข้อความ หรือรูปภาพในกระทู้ที่ไม่เหมาะสม กรุณาแจ้งทีมงานทราบ เพื่อดำเนินการต่อไป
Considering the real-time nature of this webboard, it is impossible for us to review all messages/post. Please remember that we do not actively monitor the contents of and are not responsible for any messages posted. Anyone who feels that a posted message is inappropriate, Please encouraged to contact us immediately by email at kratoo@pantip.com , and We will remove objectionable messages within a reasonable time frame.



Pantip-Cafe | Pantip-TechExchange | PantipMarket.com | PanTown.com | BlogGang.com