A-AA+then

มาต่อกันเลยเกี่ยวกับการ Join ที่มีประสิทธิภาพ
3.หลีกเลี่ยงการใช้งาน LEFT JOIN หรือ RIGHT JOIN โดยไม่จำเป็น เนื่องจากการใช้ LEFT JOIN หรือ RIGHT JOIN เราจะใช้เมื่อพบว่าข้อมูลที่ต้องการอาจมีบางรายการที่ไม่สามารถจับคู่ได้ แต่เราต้องการผลลัพท์ของมันด้วย
SELECT I.item_id,I.detail,G.cat_name
FROM items AS I
LEFT JOIN categories AS C ON C.item_id=I.item_id
LEFT JOIN category AS G ON G.cat_id=C.cat_id
WHERE I.item_id=3

ในกรณีข้างบน หากมีรายการใดในตาราง items ที่ไม่ได้กำหนดหมวดหมู่ไว้ ผลลัพท์ของรายการนั้นๆก็ยังจะแสดงออกมา ซึ่งจะแตกต่างจาก INNER JOIN ที่จะคืนค่าเฉพาะรายการที่สามารถจับคู่ได้เท่านั้น แต่มีวิธีนี้มีข้อเสียที่สำคัญก็คือ ในการจับคู่จะมีการกระทำกับทุก Record ก่อน แล้วจึงค่อยนำมาเลือกผลลัพท์ที่ต้องการทีหลัง ซึ่งถ้าข้อมูลที่นำมา JOIN มีเป็นจำนวนมากก็จะใช้เวลาในการประมวลผลนาน
SELECT Q.item_id,Q.detail,G.cat_name FROM
(SELECT item_id,detail FROM items WHERE item_id=3) AS Q
LEFT JOIN categories AS C ON C.item_id=Q.item_id
LEFT JOIN category AS G ON G.cat_id=C.cat_id

วิธีด้านบนเป็นการแก้ปัญหาในการ JOIN วิธีแรก ด้วยการจำกัดผลลัพท์ให้น้อยลงก่อน ด้วยการคัดเลือกเฉพาะรายการที่ต้องการก่อน แล้วค่อยนำไป JOIN กับตารางอื่นๆ
SELECT Q.item_id,Q.detail
,(SELECT cat_name FROM category WHERE cat_id=(
    SELECT cat_id FROM categories WHERE item_id=Q.item_id LIMIT 1
) LIMIT 1) AS cat_name
FROM (SELECT item_id,detail FROM items WHERE item_id=1) AS Q

หากในการ JOIN ต้องการผลลัพท์ที่ต้องการ จากตารางที่นำมา JOIN เพียงฟิลด์เดียว อาจเลือกใช้วิธีของ Subquery แทนได้ครับ

Relate

^