left join 3 table

March 2009 | By platoosom | MySQL | Tags : | อ่าน : 1607

การ join กันมากกว่า 2 ตารางนั้น ไม่ได้มีอะไรยุ่งยากอย่างที่คิด วิธีการก็แค่ เขียน join ต่อกันไปเรื่อยๆ ยกตัวอย่างนะครับ ถ้าสมมติว่า ผมมี ตารางในฐานข้อมูล อยู่ 3 ตาราง คือ province , amphur , tumbol เก็บ จังหวัด อำเภอ ตำบล ตามลำดับ

 

และทีนี้ ผมต้องการ เอารายชื่อตำบลมาแสดง โดยให้แสดงจังหวัด และอำเภอ ด้วย ซึ่งจังหวัดและอำเภอนั้น ก็เก็บแยกกันไว้ ตามตารางด้านบน งานนี้เลยต้อง join กัน 3 ตาราง

 

1
2
3
SELECT * FROM tumbol 
	LEFT JOIN amphur ON (tumbol.amphur_id=amphur.amphur_id)
	LEFT JOIN province ON (amphur.province_id=province.province_id)

 

เท่านี้แหละครับ จะเห็นว่าเราสามารถต่อ LEFT JOIN ไปได้เรื่อยๆ

บทความน่าสนใจ

  1. การใช้ left join ภาษา sql
  2. การใช้ inner join ภาษา sql
  3. SQL Join
  4. ฟังก์ชั่นต่อข้อความของ MySQL
  5. Navicat – Preview การติดตั้งโปรแกรม Navicat
Tags:

ผู้เขียน: วัชรเมธน์ ชิษณุคุปต์ ศรีเนธิโรทัย

เว็บไซต์ :http://www.select2web.com

งานเล็กๆก็ยิ่งใหญ่ได้ ถ้าอยู่ในที่ๆเหมาะสม

มี 10 ความเห็น ในบทความเรื่อง “left join 3 table”

  1. Suphark says:

    “SELECT Material.Description, Category.Name as Category, Company.Name FROM Material LEFT JOIN Category ON (Material.CategoryID = Category.ID) LEFT JOIN Company ON (Material.CompanyID = Company.ID) ”

    พิมพ์ตามนี้ไปแล้ว มันยังขึ้น error ว่า

    Syntax error (missing operator) in query expression ‘(Material.CategoryID = Category.ID) Left Join Company ON (Material.companyID = Company.ID)’.

    ปล ใช้ Visual basic 2008 เรียกข้อมูลจาก Access

  2. platoosom says:

    ผมว่าปัญหาน่าจะเกิดจากตรงนี้

    Category.Name as Category

    ลองเปลี่ยนเป็น Category.Name as Category_Name

    ดูนะครับ

  3. Suphark says:

    “SELECT Material.Description, Category.Name as Category, Company.Name FROM (Material LEFT JOIN Category ON Material.CategoryID = Category.ID) LEFT JOIN Company ON Material.CompanyID = Company.ID ”

    ได้ล่ะครับขอบคุณมาก ต้องใส่วงเล็บแบบนี้อ่ะครับ เหมือนคิดเลข
    (((Left join 1) Left join2) Left join 3)

  4. platoosom says:

    แสดงว่าฐานข้อมูลที่ใช้เป็น Access ถ้าเป็นฐานข้อมูล Mysql สามารถ join กันได้โดยไม่ต้องใส่วงเล็บครอบ แต่ถ้าเป็นของไมโครซอฟต์ จะต้องครอบวงเล็บให้ดี ไม่ว่าจะเป็น Access หรือ sql server

  5. platoosom says:

    อ่าว เพิ่งเห็นว่าโพสต์ข้างบนบอกว่าเป็น Access

  6. pongtornz says:

    SELECT * from order_product
    LEFT JOIN user_login ON order_product.id_login = user_login.id_login
    LEFT JOIN category ON (category.id_product=order_product.id_product);

    ใช้ได้ชัว ลองมาละ

  7. pongtornz says:

    SELECT * from ชื่อตาราง1
    LEFT JOIN ชื่อตาราง2 ON (ชื่อตาราง1.คีร่วม = ชื่อตาราง2.คีร่วม)
    LEFT JOIN ชื่อตาราง3 ON (ชื่อตาราง3.คีร่วม=ชื่อตาราง1.คีร่วม)
    ;

  8. pongtornz says:

    คีร่วม คือ คีนอก หรือ คีที่ใช่อ้างอิงทั้ง 2 ตาราง ที่มีเหมือนกัน
    pongtornz.co.cc

  9. J-com says:

    ตัวอย่างการใช้งานจริง อีกแบบหนึ่ง

    SELECT
    m.posterTime, ms.subject, m.ID_TOPIC, m.ID_MEMBER, m.ID_MSG, b.ID_BOARD, b.name AS bName,
    IFNULL(mem.realName, m.posterName) AS posterName, ” . ($user_info['is_guest'] ? ’1 AS isRead, 0 AS new_from’ : ‘
    IFNULL(lt.ID_MSG,
    IFNULL(lmr.ID_MSG, 0)) >= m.ID_MSG_MODIFIED AS isRead,
    IFNULL(lt.ID_MSG, IFNULL(lmr.ID_MSG, -1)) + 1 AS new_from’) . “, LEFT(m.body, 384) AS body, m.smileysEnabled, m.icon

    FROM ({$db_prefix}messages AS m, {$db_prefix}topics AS t, {$db_prefix}boards AS b, {$db_prefix}messages AS ms)

    LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER)” . (!$user_info['is_guest'] ? ”
    LEFT JOIN {$db_prefix}log_topics AS lt ON (lt.ID_TOPIC = t.ID_TOPIC AND lt.ID_MEMBER = $ID_MEMBER)
    LEFT JOIN {$db_prefix}log_mark_read AS lmr ON (lmr.ID_BOARD = b.ID_BOARD AND lmr.ID_MEMBER = $ID_MEMBER)” : ”) . ”

    WHERE t.ID_LAST_MSG >= ” . ($modSettings['maxMsgID'] – 35 * min($num_recent, 5)) . ”

    AND t.ID_LAST_MSG = m.ID_MSG
    AND b.ID_BOARD = t.ID_BOARD” . (empty($exclude_boards) ? ” : ”
    AND b.ID_BOARD NOT IN (” . implode(‘, ‘, $exclude_boards) . “)”) . ”
    AND $user_info[query_see_board]
    AND ms.ID_MSG = t.ID_FIRST_MSG

    ORDER BY t.ID_LAST_MSG DESC
    LIMIT $num_recent”, __FILE__, __LINE__);

  10. ann says:

    หนู jion ตารางไม่ได้เรยค่ะ ข้อมูลไม่ยอมต่อกัน

    โดยใช้คำสั่ง join filed / datamanagement tool

    ทำแล้วข้อมูลมาบ้างไม่มาบ้าง งงมากค่ะ มีวิธีแก้ไขมั้ยค่ะ

    ขอบคุณค่ะ

แสดงความเห็น

ชื่อ *
Email *
Website
ความคิดเห็น