การดึงข้อมูลจากตารางที่เชื่อมโยงกันใน Python
มาลองสร้างคำสั่งที่ดึง
ผู้ใช้ทั้งหมดพร้อมกับเมืองของพวกเขา สำหรับสิ่งนี้
จะต้องใช้คำสั่ง LEFT
JOIN:
ไวยากรณ์ของมันมีลักษณะดังนี้:
SELECT fields FROM table_name
LEFT JOIN linked_table_name ON link_condition
WHERE selection_condition
มาลองแยกส่วนต่างๆ ของไวยากรณ์ คำสั่งนี้ดู
ฟิลด์
เนื่องจากทำการเลือกข้อมูลจากหลายตาราง,
การเลือกฟิลด์ทั้งหมดผ่าน * จะ
ไม่ทำงาน คำสั่งต่อไปนี้จะเลือก
ฟิลด์จากตารางหลักเท่านั้น แต่ไม่ใช่จาก
ตารางที่เชื่อมโยง:
SELECT *
เพื่อให้ข้อมูลถูกเลือกจากทุก
ตาราง จำเป็นต้องระบุชื่อ
ตารางสำหรับการเลือกไว้ก่อน *:
SELECT users.*, cities.*
หรือสามารถระบุฟิลด์ที่เราต้องการพร้อม ระบุชื่อตารางไว้ข้างหน้าได้:
SELECT users.name, cities.name
สองวิธีนี้มีปัญหา ประเด็นคือ หากฟิลด์ในตารางมี ชื่อซ้ำกัน ในอาร์เรย์ Python จะเกิดความขัดแย้งของชื่อ และมีเพียงฟิลด์เดียว เท่านั้นที่ชนะ ฟิลด์ที่สองจะหายไป
เพื่อแก้ปัญหา จำเป็นต้องเปลี่ยนชื่อ
ฟิลด์ที่ขัดแย้งกันผ่านคำสั่ง
as:
SELECT users.name, cities.name as city_name
การเชื่อมโยง
หลังคำสั่ง ON เราต้องระบุ
ฟิลด์จากทั้งสองตาราง ซึ่งเป็นจุดที่
การเชื่อมโยงเกิดขึ้น ในกรณีของเราคือฟิลด์ id
จากตารางเมือง และฟิลด์ city_id
จากตารางผู้ใช้:
ON cities.id=users.city_id
คำสั่งค้นหา
สุดท้าย คำสั่งที่จะดึงผู้ใช้ พร้อมกับเมืองของพวกเขาจะมีลักษณะ ดังนี้:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
แบบฝึกหัด
สมมติว่าคุณมีตารางสินค้าและ ตารางหมวดหมู่ของพวกเขา เขียนคำสั่ง ที่ดึงชื่อสินค้าพร้อมกับ หมวดหมู่ของพวกเขา