นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน
อ่าน: 1735
ความเห็น: 3

MySQL Left join ตอนที่ 2

MySQL Left join ตอนที่ 2

หลังจากที่เมื่อวานมาแนะนำการใช้ Left join ใน Mysql ไปแล้ววันนี้ก็มีการใช้ Left join ที่เพิ่มมาอีกข้อหนึ่งคือ เราจะ join ไปทีละ table (เมื่อวานเรา join พร้อมกันเลยสาม table)

สมมุติเรามี table 3 table

table:data

-item_id

-title_id

-author_name

-publish_data

-major_id

-paper_id

-----------------------------------------------------

table:major

-major_id

-major_name

-----------------------------------------------------

table:papertype

-paper_id

-paper_type 

------------------------------------------------------

โดยที่table major,papertype มี major_id,paper_type ที่เหมือนกัน table ทางซ้ายที่เราจะใช้เป็นหลักในการ join (table:data) และเมื่อหากย้อนกลับไปดูบทความเรื่อง Left join ในตอนแรกที่ผมเขียนไปทุก table จะถูกเชื่อมโดย user_id แต่ในที่นี้เราไม่มี user_id  แต่เราต้องการจะทราบชื่อ  major_name,paper_type โดยจะให้มันไปเทียบ major_id,paper_id   

ซึ่งสามารถเขียนได้สองแบบดังนี้

แบบแรกเป็นวิธีการเขียนเหมือนตอนที่แล้ว

SELECT data.item_id,data.title_name,data.author_name,data.publish_date,
major.major_name , papertype.paper_type   from data left join (major,papertype) on (major.major_id=data.major_id and papertype.paper_id=data.paper_id) order by data.item_id ASC

------------------------------------------------------------------------
แบบที่สองเป็นการเขียน join ทีละ table

SELECT data.item_id, data.title_name, data.author_name, data.publish_date, major.major_name, papertype.paper_type FROM data LEFT JOIN major  ON ( data.major_id = major.major_id) left join papertype on (data.paper_id = papertype.paper_id ) ORDER BY data.item_id ASC 

------------------------------------------------------------------------------

โดยทั้งสองแสดงผลลัพธ์แบบเดียวกันเป๊ะเลย เผื่อเป็นแนวทางให้กับคนที่กำลังหัดเขียน Query  left join ดูนะครับ 

และหากวันหน้ามีอะไรเพื่มอีกจะเอามาเขียนเพิ่มอย่างแน่นอนครับ.. 

หมวดหมู่บันทึก: พัฒนางานประจำ
สัญญาอนุญาต: ไม่สงวนสิทธิ์ใดๆ Public_domain
สร้าง: 19 เมษายน 2556 11:30 แก้ไข: 22 เมษายน 2556 09:08 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ: Ico24 Our Shangri-La และ Ico24 ทดแทน.
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

สิ่งที่ (ข้อมูล) เราต้องการเลือก (ดึงจากตาราง) คือ

SELECT data.item_id, data.title_name, data.author_name, data.publish_date, major.major_name, papertype.paper_type

ซึ่งจะเหมือนกันทั้ง ๒ คำสั่ง แต่สิ่งที่ต่างกันก็คือ คำสั่งในการ join (หลัง From data) คือ

- left join (major,papertype) on (major.major_id=data.major_id and papertype.paper_id=data.paper_id)

กับ

- LEFT JOIN major  ON ( data.major_id = major.major_id) left join papertype on (data.paper_id = papertype.paper_id )

ตัวพิมพ์เล็กกับตัวพิมพ์ใหญ่ให้ความหมายเหมือนกัน ???

คำสั่งแรก

กำหนดตารางหลัก (ทางซ้าย) ไว้ ๒ ตารางคือ major,  กับ papertype เพื่อให้ตารางทางขวา (data) มา join (กัน join กัน) โดยใช้ major_id และ paper_id

 

คำสั่งที่ ๒

join ตาราง data กับ major ก่อน ด้วย major_id โดยให้ตาราง major เป็นหลัก (ทางซ้าย) จากนั้นให้นำข้อมูลที่ผ่านการ join ในครั้งแรกไป join กับตาราง papertype ด้วย paper_id โดยให้ตาราง papertype เป็นตารางหลัก (ทางซ้าย)

หรือ major กับ data join กันเสร็จแล้วเสร็จเลยไม่เกี่ยวกับการ join ของ papertype กับ data

หรือ ๒ กรณี (ของคำสั่ง join ที่ ๒) ให้ผลต่างกันหรือเปล่า ?

อิอิอิ

เราเอง

 

1.ตัวพิมพ์เล็กกับตัวพิมพ์ใหญ่ให้ความหมายเหมือนกันครับ

2.major กับ data join กันเสร็จแล้ว แต่ก็ยังเกี่ยวกับการ join ของ papertype กับ data อยู่ครับเพราะเราใช้ and มันก็จะทำอันหลังด้วย แต่ถ้าใช้ or มันทำด้านหน้าอย่างเดียวเมื่อถูกต้องแล้วก็จะหลุดจากวงเว็บเลย

3.ทั้งสองคำสั่งให้ผลเหมือนกันครับ

ขอบคุณครับ  Champy ที่ให้ความกระจ่าง

ผมเขียนไปเขียนมาเกิดงงเองขึ้นมา เลยมีคำถามที่งง ๆ กับตัวเองว่า

การ join แบบที่ ๒ คือทีละตารางนั้นเป็นการ join  แบบไหนระหว่าง

- ตาราง ๑ (data) join ตาราง ๒ ได้ผลเป็นอย่างไร นำผลที่ได้ไป join กับ ตาราง ๓ ผลได้อย่างไรนำมาแสดงผล (ตามที่ได้ select)

- ตาราง ๑ (data) join กับตาราง ๒ ได้ผลอย่างไรเก็บไว้ (๑๒) จากนั้น join ตาราง ๑ กับ ๓ ได้ผลเป็นอย่างไร (๑๓) เก็บไว้ จากนั้นนำผลการ join ๑๒ และ ๑๓ มาแสดง (ตามที่ได้ select)

- ตาราง ๑ (data) join กับตาราง ๒ ได้ผลอย่างไรเก็บไว้ (๑๒) จากนั้น join ตาราง ๑ กับ ๓ ได้ผลเป็นอย่างไร (๑๓) นำไป join กับ ๑๒ แล้วนำผลมาแสดง (ตามที่ได้ select)

ยิ่งคิดยิ่งงงกับตัวเอง จาก ๒ แบบกลายเป็น ๓ แบบไปซะงั้น

อิอิอิ

ทั้ง ๓ แบบให้ผลเหมือนกันไหม?

แต่ก่อนจะถามว่าให้ผลเหมือนกันไหม ก็คงต้องถามว่า แบบไหนมีโอกาสเกิดขึ้นได้บ้าง หรือจริง ๆ แล้วการ join ทีละตารางนั้น กระบวนการที่เกิดขึ้นเกิดแบบไหนใน ๓ อย่างข้างบน

ถ้าให้เดานะครับ ผมว่า ๒ และ ๓ น่าจะไม่เกิดขึ้น โดยเฉพาะแบบ ๓ น่าจะให้ผลลัพธ์ที่ซ้ำซ้อนเกิดขึ้นมา

อิอิอิ

คิดเล่น ๆ ตามประสาคนชอบดมไปเรื่อย ๆ น่ะครับ

ขอบคุณครับ

เราเอง

 

ร่วมแสดงความเห็นในหน้านี้

ชื่อ:
อีเมล:
IP แอดเดรส: 54.87.61.215
ข้อความ:  
เรียกเครื่องมือจัดการข้อความ
   
ยกเลิก หรือ