การ 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 ไปได้เรื่อยๆ
บทความน่าสนใจ
- การใช้ left join ภาษา sql
- การใช้ inner join ภาษา sql
- SQL Join
- ฟังก์ชั่นต่อข้อความของ MySQL
- Navicat – Preview การติดตั้งโปรแกรม Navicat
Tags: MySQL
มี 9 ความเห็น ในบทความเรื่อง “left join 3 table”
แสดงความเห็น
Categories
-
Recent Posts
- เครื่องฟ้อง error จอฟ้า STOP: c0000221 {Bad Image Checksum}
- The application failed to initialize properly(000000)
- อยากเปิดร้านคอม ทำยังไงดี?
- Wordpress Theme PhotoMadness ธีมสำหรับคนชอบถ่ายภาพ
- mail server : ติดตั้ง argosoft mail server
- mail server สร้างเมล์เซิฟเวอร์ทดสอบโค้ดส่งอีเมล์ ด้วย hmailserver
- php redirect สั่งเด้งฟ้าผ่า
- javascript ห้ามคลิกขวา
- CSS IE Bugs แมลงร้ายในไออี 6
- PHP round ปัดเศษ
- PHP ceil() ปัดเศษขึ้น
- Gravatar สร้างร่างใหม่สู่โลกออนไลน์
- PHP floor() ปัดเศษลง
- แจกโค้ด php คำนวณอายุ
- PHP date() ฟังก์ชั่นจัดการวัน-เวลา
Tags
Array Back to the basic calendar CAPTCHA chart CSS Dreamveawer error firefox firefox plugin FPDF General gmail google hotmail html icon icons javascript jQuery jquery plugin jquery slide jquery tooltip jQuery tutorial jQuery UI loop Mac MySQL Other PHP plugin program programming slide slide show SMF smf themes smf themes download smf themes free smf themes thai SQL sql function tooltip Wordpress wordpress plugin
“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
ผมว่าปัญหาน่าจะเกิดจากตรงนี้
Category.Name as Category
ลองเปลี่ยนเป็น Category.Name as Category_Name
ดูนะครับ
“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)
แสดงว่าฐานข้อมูลที่ใช้เป็น Access ถ้าเป็นฐานข้อมูล Mysql สามารถ join กันได้โดยไม่ต้องใส่วงเล็บครอบ แต่ถ้าเป็นของไมโครซอฟต์ จะต้องครอบวงเล็บให้ดี ไม่ว่าจะเป็น Access หรือ sql server
อ่าว เพิ่งเห็นว่าโพสต์ข้างบนบอกว่าเป็น Access
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);
ใช้ได้ชัว ลองมาละ
SELECT * from ชื่อตาราง1
LEFT JOIN ชื่อตาราง2 ON (ชื่อตาราง1.คีร่วม = ชื่อตาราง2.คีร่วม)
LEFT JOIN ชื่อตาราง3 ON (ชื่อตาราง3.คีร่วม=ชื่อตาราง1.คีร่วม)
;
คีร่วม คือ คีนอก หรือ คีที่ใช่อ้างอิงทั้ง 2 ตาราง ที่มีเหมือนกัน
pongtornz.co.cc
ตัวอย่างการใช้งานจริง อีกแบบหนึ่ง
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__);