การ 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 ไปได้เรื่อยๆ
Suphark says:
12/05/2552 at 12/05/2552
“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
administrator says:
13/05/2552 at 13/05/2552
ผมว่าปัญหาน่าจะเกิดจากตรงนี้
Category.Name as Category
ลองเปลี่ยนเป็น Category.Name as Category_Name
ดูนะครับ
Suphark says:
13/05/2552 at 13/05/2552
“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)
administrator says:
14/05/2552 at 14/05/2552
แสดงว่าฐานข้อมูลที่ใช้เป็น Access ถ้าเป็นฐานข้อมูล Mysql สามารถ join กันได้โดยไม่ต้องใส่วงเล็บครอบ แต่ถ้าเป็นของไมโครซอฟต์ จะต้องครอบวงเล็บให้ดี ไม่ว่าจะเป็น Access หรือ sql server
administrator says:
14/05/2552 at 14/05/2552
อ่าว เพิ่งเห็นว่าโพสต์ข้างบนบอกว่าเป็น Access
pongtornz says:
24/02/2553 at 24/02/2553
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);
ใช้ได้ชัว ลองมาละ
pongtornz says:
24/02/2553 at 24/02/2553
SELECT * from ชื่อตาราง1
LEFT JOIN ชื่อตาราง2 ON (ชื่อตาราง1.คีร่วม = ชื่อตาราง2.คีร่วม)
LEFT JOIN ชื่อตาราง3 ON (ชื่อตาราง3.คีร่วม=ชื่อตาราง1.คีร่วม)
;
pongtornz says:
24/02/2553 at 24/02/2553
คีร่วม คือ คีนอก หรือ คีที่ใช่อ้างอิงทั้ง 2 ตาราง ที่มีเหมือนกัน
pongtornz.co.cc
J-com says:
25/02/2553 at 25/02/2553
ตัวอย่างการใช้งานจริง อีกแบบหนึ่ง
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__);
ann says:
10/05/2553 at 10/05/2553
หนู jion ตารางไม่ได้เรยค่ะ ข้อมูลไม่ยอมต่อกัน
โดยใช้คำสั่ง join filed / datamanagement tool
ทำแล้วข้อมูลมาบ้างไม่มาบ้าง งงมากค่ะ มีวิธีแก้ไขมั้ยค่ะ
ขอบคุณค่ะ
May says:
16/11/2553 at 16/11/2553
ขอบคุณมากๆเรยค่ะ
zerguuu says:
10/10/2554 at 10/10/2554
แล้วถ้า ใน table province มี sup table อีก แล้วต้องการ join province เข้ากับ sup table นั้นเช่น province_detail เพื่อดึงค่าบางตัวจากใน province_detail มาใช้ด้วย ต้องดึงไงคะ
anu says:
22/02/2557 at 22/02/2557
พอดีต้องการ join ทั้งหมด 4 ตาราง ควรทำไงคับ
วัชรเมธน์ ชิษณุคุปต์ ศรีเนธิโรทัย says:
25/02/2557 at 25/02/2557
ก็ต่อ join ไปเรื่อยๆ ครับท่าน