วันอาทิตย์ที่ 2 กันยายน พ.ศ. 2555

การหาข้อมูลในตารางหนึ่ง ที่ไม่มีในอีกตารางหนึ่ง ของ Access 2010

บางครั้งเราต้องการหาว่า ข้อมูลในตารางหนึ่ง ที่ไม่มีในอีกตารางหนึ่ง จะทำอย่างไร สมมติว่า มีข้อมูล 2 ตาราง คือ tblCode และ tblData ตาราง tblCode เก็บรหัสอำเภอ และ tblData เก็บข้อมูลที่ผู้ใช้ป้อนเข้ามา ซึ่งมีรหัสอำเภออยู่ด้วย จึงต้องตรวจสอบว่า อำเภอใน tblData มีอยู่ในตาราง tblCode หรือไม่

(ความจริงถ้าออกแบบดี ๆ กำหนดให้ผู้ใช้เลือกจากตัวเลือก จะได้ถูกต้อง และไม่เกิดข้อผิดพลาด ก็จะไม่ต้องมาหาว่า ข้อมูลที่พิมพ์เข้ามาพิมพ์ถูกหรือไม่)

ตาราง tblCode
ตาราง tblData

จากตาราง จะเห็นว่า โพธาราม ในตาราง tblData ไม่มีในตาราง tblCode ในกรณีนี้ เราต้องการหาว่า ข้อมูลในตาราง tblData ที่ไม่มีในตาราง tblCode

การหาลักษณะนี้ นอกจากจะหาชื่ออำเภอที่ไม่ปรากฏ ในอีกกรณีหนึ่งคือพิมพ์ชื่ออำเภอผิด เช่น บ้านไร่ พิมพ์เป็น บ้านไร (ลืมใส่ไม้เอก) ก็จะสามารถหาได้ ด้วยวิธีเดียวกันนี้

วิธีการ

ให้สร้างแบบสอบถาม ชนิดเลือก (Select Query) และกำหนดความสัมพันธ์ของฟิลด์ที่ต้องการเป็นแบบ LeftJoin โดยให้รวมระเบียนทั้งหมดจากตาราง tblData และ เฉพาะระเบียนจาก tblCode ซึ่งมีเขตข้อมูลที่ใช้ในการรวมเท่ากัน จากความสัมพันธ์นี้ จะทำให้บางระเบียน ในตาราง tblData ซึ่งเป็นข้อมูลที่ไม่มีใน tblCode จะมีค่าเป็น Null คือ ไม่มีคู่ในตาราง tblCode ดังนั้น ถ้าจะแสดงเฉพาะข้อมูลในตาราง tblData ที่ไม่มีในตาราง tblCode จึงต้องไปกำหนดเงื่อนไขในส่วนของตาราง tblCode เท่ากับ Null ก็จะแสดงให้เห็นเฉพาะข้อมูลที่มีในตาราง tblData แต่ไม่มีในตาราง tblCode

ขั้นตอน
  1. สร้างแบบสอบถามใหม่ จากข้อมูลทั้งสองตาราง
  2. สร้างความสัมพันธ์ของฟิลด์ amph และ dataAmp เป็นแบบ left join โดย
    1. ลากฟิลด์ dataAmp ของตาราง tblData มาทับฟิลด์ amph ของตาราง tblCode
    2. คลิกขวาที่เส้นความสัมพันธ์ เลือก คุณสมบัติการรวม (join property)
    3. เลือกให้แสดงฟิลด์ทั้งหมดของตาราง tblData
    4. คลิก ตกลง จะได้ความสัมพันธ์ left join ดังภาพ
  3. ดับเบิ้ลคลิกที่ฟิลด์ dataAmp แล้ว ดับเบิ้ลคลิกที่ฟิลด์ amp เพื่อนำฟิลด์ทั้งสองไปไว้ที่เขตข้อมูลข้างล่าง
  4. ถ้าเรียกใช้แบบสอบถาม โดยกดปุ่มเครื่องหมายตกใจ จะเห็นว่ามีข้อมูลในฟิลด์ dataAmp ของตาราง tblData มาแสดงทั้งหมด และ มีช่องว่าง ในส่วนของฟิลด์ amph เนื่องจากไม่มีข้อมูล
  5. ดังนั้น ถ้าต้องการให้แสดงเฉพาะรายการ หรือ ระเบียน ที่มีในฟิลด์ dataAmp แต่ไม่มีใน amph จึงต้องกำหนดเงื่อนไขในฟิลด์ amph ให้แสดงเฉพาะที่มีค่าเป็น Null คือไม่มีข้อมูลอะไร หรือเป็นช่องว่าง (ความจริง Null ไม่เท่ากับช่องว่างนะครับ Null แปลว่า ไม่มีอะไรอยู่เลย -- งงไหมเนี่ย?)
  6. ที่ช่อง เกณฑ์ ของฟิลด์ amph ให้พิมพ์ Is Null เป็นการให้เงื่อนไขว่าให้แสดงเฉพาะที่เป็น Null เท่านั้น
  7. เรียกใช้แบบสอบถาม โดยกดปุ่มเครื่องหมายตกใจ ในแทบออกแบบ กลุ่มผลลัพธ์ จะเห็นเฉพาะอำเภอ โพธาราม เท่านั้น
  8. ถ้าดูแบบ SQL จะเห็นโค้ด SQL ดังนี้

    SELECT tblData.dataAmp, tblCode.amph
    FROM tblData LEFT JOIN tblCode ON tblData.dataAmp = tblCode.amph
    WHERE (((tblCode.amph) Is Null));

ไม่มีความคิดเห็น:

แสดงความคิดเห็น