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

เราจะแปลงแบบสอบถามย่อยเป็น LEFT JOIN ได้อย่างไร


เพื่อให้เข้าใจว่าเรากำลังใช้ข้อมูลจากตารางต่อไปนี้ -

mysql> Select * from customers;
+-------------+----------+
| Customer_Id | Name     |
+-------------+----------+
| 1           | Rahul    |
| 2           | Yashpal  |
| 3           | Gaurav   |
| 4           | Virender |
+-------------+----------+
4 rows in set (0.00 sec)

mysql> Select * from reserve;
+------+------------+
| ID   | Day        |
+------+------------+
| 1    | 2017-12-30 |
| 2    | 2017-12-28 |
| 2    | 2017-12-25 |
| 1    | 2017-12-24 |
| 3    | 2017-12-26 |
+------+------------+
5 rows in set (0.00 sec)

ต่อไปนี้เป็นแบบสอบถามย่อยที่จะค้นหาชื่อของลูกค้าทั้งหมดที่ยังไม่ได้จองรถใด ๆ

mysql> Select Name from customers where customer_id NOT IN (Select id From reserve);
+----------+
| Name     |
+----------+
| Virender |
+----------+
1 row in set (0.00 sec)

ตอนนี้ ด้วยความช่วยเหลือของขั้นตอนต่อไปนี้ เราสามารถแปลงแบบสอบถามย่อยด้านบนเป็นการเข้าร่วม RIGHT -

  • ย้ายตาราง 'สำรอง' ที่มีชื่ออยู่ในข้อความค้นหาย่อยไปยังส่วนคำสั่ง FROM และรวมเข้ากับ 'ลูกค้า' โดยใช้ LEFT JOIN
  • ส่วนคำสั่ง WHERE เปรียบเทียบคอลัมน์ customer_id กับรหัสที่ส่งคืนจากเคียวรีย่อย ดังนั้นให้แปลงนิพจน์ IN เป็นการเปรียบเทียบโดยตรงอย่างชัดเจนระหว่างคอลัมน์ id ของสองตารางในส่วนคำสั่ง FROM
  • ในส่วนคำสั่ง WHERE จำกัดเอาต์พุตเฉพาะแถวที่มี NULL ในตาราง "สำรอง"
mysql> SELECT Name from customers LEFT JOIN reserve ON customer_id = Id WHERE Id IS NULL;
+----------+
| Name     |
+----------+
| Virender |
+----------+
1 row in set (0.00 sec)