Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ค้นหาบันทึกจากตาราง MySQL ที่ไม่มีอยู่ในตารางอื่น?


ในการค้นหาระเบียนจากตาราง MySQL หนึ่งตารางที่ไม่มีอยู่ในอีกตารางหนึ่ง เราสามารถใช้แบบสอบถามย่อยสำหรับตารางที่ไม่มีระเบียน สิ่งนี้สามารถเข้าใจได้ดีขึ้นโดยใช้ขั้นตอนที่กำหนด -

ขั้นแรกให้สร้างตารางโดยใช้คำสั่ง create ชื่อตารางคือ 'PresentHistory' และมีสองคอลัมน์ ได้ดังนี้ −

mysql> สร้างตาราง PresentHistory-> (-> HisID int,-> HisName varchar(100)-> ); ตกลง ตกลง 0 แถวได้รับผลกระทบ (0.54 วินาที)

หลังจากสร้างตารางแล้ว ระเบียนบางรายการจะถูกแทรกซึ่งจะปรากฏในตารางที่สองด้วย ทำได้โดยใช้คำสั่ง insert ดังนี้ −

mysql> INSERT ลงในค่า PresentHistory (1,'John');Query OK, 1 แถวได้รับผลกระทบ (0.13 วินาที)mysql> INSERT เป็นค่า PresentHistory (2,'Bob');Query OK, 1 แถวได้รับผลกระทบ (0.15 วินาที )

หลังจากแทรกเร็กคอร์ดเรียบร้อยแล้ว จะแสดงด้วยคำสั่ง select ดังนี้ −

mysql> SELECT * จาก PresentHistory;

หลังจากดำเนินการค้นหาข้างต้น ผลลัพธ์ที่ได้คือ

<ก่อนหน้า>+-------+---------+| HisID | HisName |+-------+---------+| 1 | จอห์น || 2 | Bob |+-------+---------+2 แถวในชุด (0.00 วินาที)

ตอนนี้สร้างตารางที่สองโดยใช้คำสั่ง create ตารางนี้มีชื่อว่า 'PastHistory' และประกอบด้วยสองคอลัมน์ตามที่ระบุด้านล่าง

mysql> สร้างตาราง PastHistory-> (-> PastId int,-> PastName varchar(100)-> ); ตกลง ตกลง 0 แถวได้รับผลกระทบ (0.74 วินาที)

หลังจากสร้างตารางแล้ว บางระเบียนที่มีอยู่ในตารางแรกและบางระเบียนที่ไม่มีอยู่ในตารางแรกจะถูกแทรกลงในตาราง PastHistory

mysql> INSERT ลงในค่า PastHistory (1,'John');Query OK, 1 แถวได้รับผลกระทบ (0.13 วินาที)mysql> INSERT ลงในค่า PastHistory (2,'Bob');Query OK, 1 แถวได้รับผลกระทบ (0.13 วินาที )mysql> INSERT ลงในค่า PastHistory(3,'Carol');Query OK, 1 แถวได้รับผลกระทบ (0.17 วินาที)mysql> INSERT เป็นค่า PastHistory (4,'Jason'); Query OK, 1 แถวได้รับผลกระทบ (0.16 วินาที)

ตอนนี้มี 4 ระเบียนในตารางที่สอง จากทั้งหมดนี้มี 2 ระเบียนมาจากตารางแรก และ 2 ระเบียนต่างกันในตารางที่สอง

ระเบียนในตารางที่สองสามารถดูได้ด้วยคำสั่ง select ดังนี้ −

mysql> SELECT * จาก PastHistory;

ผลลัพธ์ของแบบสอบถามข้างต้นคือ

<ก่อนหน้า>+---------+----------+| PastId | PastName |+-------+----------+| 1 | จอห์น || 2 | บ๊อบ || 3 | แครอล || 4 | Jason |+-------+----------+4 แถวในชุด (0.00 วินาที)

ไวยากรณ์ในการตรวจสอบระเบียนจากตารางหนึ่งที่ไม่มีอยู่ในตารางที่สองมีดังต่อไปนี้ -

เลือก * จาก yourSecondTableName โดยที่ columnNamefromSecondtable NOT IN (SELECT columnNamefromfirsttable from yourFirstTableName);

แบบสอบถามที่กำหนดจะใช้เพื่อรับระเบียนที่แตกต่างกันในตารางที่สอง -

mysql> SELECT * จาก PastHistory โดยที่ PastName ไม่ได้อยู่ใน (เลือก HisName fromPresentHistory);

ผลลัพธ์ของแบบสอบถามข้างต้นเป็นดังนี้ −

<ก่อนหน้า>+---------+----------+| PastId | PastName |+-------+----------+| 3 | แครอล || 4 | Jason |+-------+----------+2 แถวในชุด (0.00 วินาที)

จากผลลัพธ์ข้างต้น เป็นที่ชัดเจนว่าเราได้พบระเบียนสองรายการที่ไม่มีอยู่ในตารางแรก