Thep Excel

Table.Join – รวมตารางแบบ SQL Join

Table.Join ใช้รวมตารางสองตารางโดยจับคู่ค่าในคอลัมน์กำหนด สนับสนุนทุกประเภท join (Inner, Left Outer, Right Outer, Full Outer, Anti, Semi) เหมือน SQL Join

=Table.Join(table1 as table, key1 as any, table2 as table, key2 as any, optional joinKind as nullable number, optional joinAlgorithm as nullable number, optional keyEqualityComparers as nullable list) as table

By ThepExcel AI Agent
3 December 2025

Function Metrics


Popularity
7/10

Difficulty
5/10

Usefulness
8/10

Syntax & Arguments

=Table.Join(table1 as table, key1 as any, table2 as table, key2 as any, optional joinKind as nullable number, optional joinAlgorithm as nullable number, optional keyEqualityComparers as nullable list) as table

Argument Type Required Default Description
table1 table Yes ตารางแรก (ตารางซ้าย) – ตัวอักษรกำหนดว่าจะรักษาแถวจากตารางนี้ไว้ในจำนวนเท่าใด
key1 any Yes คอลัมน์ key จากตารางแรก – สามารถระบุเป็น text เดี่ยว “ID” หรือ list หลายคอลัมน์ {“TenantID”, “CustomerID”}
table2 table Yes ตารางที่สอง (ตารางขวา) – ตารางที่ต้องการรวมข้อมูลเข้า
key2 any Yes คอลัมน์ key จากตารางที่สอง – ต้องตรงกันกับ key1 เพื่อจับคู่ข้อมูล
joinKind number Optional ประเภท join (JoinKind.Inner, JoinKind.LeftOuter, JoinKind.RightOuter, JoinKind.FullOuter, JoinKind.LeftAnti, JoinKind.RightAnti, JoinKind.LeftSemi, JoinKind.RightSemi) – ถ้าไม่ระบุจะเป็น JoinKind.Inner
joinAlgorithm number Optional อัลกอริทึมที่ใช้ในการ join (ใช้ต่อเมื่อต้องการปรับแต่ง performance – ใช้ไม่บ่อยนัก)
keyEqualityComparers list Optional รายการ equality comparer สำหรับการเปรียบเทียบค่า (ใช้ต่อเมื่อต้องการ case-insensitive หรือการเปรียบเทียบพิเศษ)

Examples

Inner Join – จับคู่ลูกค้ากับออเดอร์
Table.Join( Customers, "CustomerID", Orders, "CustomerID", JoinKind.Inner )
รวมตารางสองตารางโดยจับคู่คอลัมน์ CustomerID ทั้งสองตาราง – ได้เฉพาะแถวที่มีค่า CustomerID ตรงกันในทั้งสองตาราง
Power Query Formula:

= Table.Join(
    Customers,
    "CustomerID",
    Orders,
    "CustomerID",
    JoinKind.Inner
)

Result:

ตารางที่รวมข้อมูลลูกค้า (Name, Phone) กับออเดอร์ (OrderID, Item, Price) - เฉพาะลูกค้าที่มีออเดอร์เท่านั้น

Left Outer Join – เก็บลูกค้าทั้งหมด
let Customers = Table.FromRecords({ [CustomerID = 1, Name = "Bob"], [CustomerID = 2, Name = "Alice"], [CustomerID = 3, Name = "Charlie"] }), Orders = Table.From…
Left Outer Join เก็บแถวทั้งหมดจากตารางซ้าย (Customers) และเพิ่มข้อมูลจากตารางขวา (Orders) ถ้ามี – ถ้าไม่มีการจับคู่ให้ null
Power Query Formula:

= let
    Customers = Table.FromRecords({
        [CustomerID = 1, Name = "Bob"],
        [CustomerID = 2, Name = "Alice"],
        [CustomerID = 3, Name = "Charlie"]
    }),
    Orders = Table.FromRecords({
        [CustomerID = 1, Item = "Fishing rod"],
        [CustomerID = 1, Item = "Worms"]
    }),
    Result = Table.Join(
        Customers,
        "CustomerID",
        Orders,
        "CustomerID",
        JoinKind.LeftOuter
    )
in
    Result

Result:

4 แถว: Bob (2 ออเดอร์), Alice (null), Charlie (null) - ลูกค้าทั้งหมดมีอยู่แม้ว่าจะไม่มีออเดอร์

Join หลายคอลัมน์ – จับคู่ TenantID และ CustomerID
let Customers = Table.FromRecords({ [TenantID = 1, CustomerID = 1, Name = "Bob"], [TenantID = 2, CustomerID = 1, Name = "Alice"] }), Orders = Table.FromRecords(…
ใช้ list key {"TenantID", "CustomerID"} เพื่อจับคู่หลายคอลัมน์พร้อมกัน – ทั้งสองคอลัมน์ต้องตรงกันจึงจะจับคู่ได้
Power Query Formula:

= let
    Customers = Table.FromRecords({
        [TenantID = 1, CustomerID = 1, Name = "Bob"],
        [TenantID = 2, CustomerID = 1, Name = "Alice"]
    }),
    Orders = Table.FromRecords({
        [TenantID = 1, CustomerID = 1, OrderID = 101],
        [TenantID = 2, CustomerID = 1, OrderID = 102]
    }),
    Result = Table.Join(
        Customers,
        {"TenantID", "CustomerID"},
        Orders,
        {"TenantID", "CustomerID"},
        JoinKind.Inner
    )
in
    Result

Result:

2 แถว: TenantID=1 (Bob กับ OrderID=101) และ TenantID=2 (Alice กับ OrderID=102) - จับคู่แบบถูกต้องตาม tenant

Anti Join – หาลูกค้าที่ไม่เคยสั่งซื้อ
Table.Join( Customers, "CustomerID", Orders, "CustomerID", JoinKind.LeftAnti )
Left Anti Join คืนแถวจากตารางซ้ายที่ไม่มีการจับคู่ในตารางขวา – มีประโยชน์สำหรับการหา records ที่ขาดหายไป
Power Query Formula:

= Table.Join(
    Customers,
    "CustomerID",
    Orders,
    "CustomerID",
    JoinKind.LeftAnti
)

Result:

แสดงเฉพาะลูกค้าที่ไม่มีแถวตรงกันใน Orders (เช่น Alice และ Charlie ที่ไม่มีออเดอร์)

FAQs

ต้องระบุ joinKind ไหม ถ้าไม่ระบุจะเกิดอะไรขึ้น?

ไม่จำเป็น JoinKind.Inner จะถูกใช้เป็น default ถ้าคุณไม่ระบุ – แต่ถ้าต้อง Left Outer หรือประเภทอื่นต้องระบุชัดเจน

ถ้า key ไม่ตรงกันหรือค่า null จะเกิดอะไรขึ้น?

Key ไม่ตรงกัน = ไม่มีการจับคู่ (หรือได้ null ใน Left/Right Outer Join) – ค่า null ใน key ถือว่าไม่ตรงกัน (null ≠ null)

ต่างกันอย่างไรระหว่าง Inner Join กับ Left Outer Join?

Inner = เฉพาะแถวที่มีการจับคู่ | Left Outer = เก็บแถวทั้งหมดจากตารางซ้าย + เพิ่มข้อมูลจากตารางขวา (null ถ้าไม่มีการจับคู่)

สามารถ join มากกว่า 2 คอลัมน์พร้อมกันได้ไหม?

ได้ ใช้ list key เช่น {“Col1”, “Col2”, “Col3”} และต้องตรงกันทั้ง 3 คอลัมน์จึงจะจับคู่

ถ้าตารางมีชื่อคอลัมน์ซ้ำกันจะเกิดอะไรขึ้น?

Power Query จะเพิ่มเลขตัวเลขให้ (เช่น Name, Name2) – ถ้าไม่อยากให้เกิดปัญหาควร rename หรือ select เฉพาะคอลัมน์ที่ต้องการก่อน join

Resources & Related

Additional Notes

Table.Join ทำหน้าที่รวมตารางสองตารางเข้าด้วยกัน โดยจับคู่แถวตามค่าที่ตรงกันในคอลัมน์ key

ส่วนตัวผมใช้ Table.Join เวลาต้องรวมข้อมูลจากตารางที่มีความสัมพันธ์กัน เช่นรวมออเดอร์กับข้อมูลลูกค้า แล้วระบุว่า join แบบไหน (inner, left outer ฯลฯ) ตรงไปตรงมา ไม่ต้องยุ่งกับ conditional logic แบบ Table.SelectRows 😎

Leave a Reply

Your email address will not be published. Required fields are marked *