---
title: JoinKind.Type – ระบุประเภทของการ Join ในตารางข้อมูล
url: https://www.thepexcel.com/functions/power-query/enumerations/joinkind-type/
type: function-explainer
program: Power Query
syntax: "JoinKind.Inner | JoinKind.LeftOuter | JoinKind.RightOuter | JoinKind.FullOuter | JoinKind.LeftAnti | JoinKind.RightAnti | JoinKind.LeftSemi | JoinKind.RightSemi"
date: 2025-12-04
updated: 2025-12-26
scores:
  popularity: 6
  difficulty: 2
  usefulness: 6
---

# JoinKind.Type – ระบุประเภทของการ Join ในตารางข้อมูล

> JoinKind.Type คือ enum ที่ระบุประเภทของการ Join (Inner, Outer, Anti, Semi) เมื่อรวมตารางข้อมูลสองตาร

## คำอธิบาย

JoinKind.Type คือ enum ที่ระบุประเภทของการ Join (Inner, Outer, Anti, Semi) เมื่อรวมตารางข้อมูลสองตาราง ใช้กับ Table.Join เพื่อควบคุมว่าแถวไหนจะปรากฏในผลลัพธ์

## Syntax

```excel
JoinKind.Inner | JoinKind.LeftOuter | JoinKind.RightOuter | JoinKind.FullOuter | JoinKind.LeftAnti | JoinKind.RightAnti | JoinKind.LeftSemi | JoinKind.RightSemi
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| JoinKind.Inner | No | JoinKind Enum |  | แสดงแถวที่ key ตรงกันในทั้งสองตาราง |
| JoinKind.LeftOuter | No | JoinKind Enum |  | เก็บแถวทั้งหมดจากตารางแรก แถวที่ไม่ตรงกันจากตารางที่สองจะ null |
| JoinKind.RightOuter | No | JoinKind Enum |  | เก็บแถวทั้งหมดจากตารางที่สอง แถวที่ไม่ตรงกันจากตารางแรกจะ null |
| JoinKind.FullOuter | No | JoinKind Enum |  | เก็บแถวทั้งหมดจากทั้งสองตาราง แถวที่ไม่ตรงกันจะมี null ในคอลัมน์ที่ไม่เกี่ยวข้อง |
| JoinKind.LeftAnti | No | JoinKind Enum |  | แสดงแถวจากตารางแรกที่ไม่มี key ตรงกันในตารางที่สอง |
| JoinKind.RightAnti | No | JoinKind Enum |  | แสดงแถวจากตารางที่สองที่ไม่มี key ตรงกันในตารางแรก |
| JoinKind.LeftSemi | No | JoinKind Enum |  | แสดงแถวจากตารางแรกที่มี key ตรงกันในตารางที่สอง (ไม่เพิ่มคอลัมน์จากตารางที่สอง) |
| JoinKind.RightSemi | No | JoinKind Enum |  | แสดงแถวจากตารางที่สองที่มี key ตรงกันในตารางแรก (ไม่เพิ่มคอลัมน์จากตารางแรก) |

## ตัวอย่าง

### 1. ใช้ JoinKind.Inner เพื่อรวมเฉพาะข้อมูลที่ตรงกัน

```excel
let
    Table1 = Table.FromRecords({[ID=1, Name="Alice"], [ID=2, Name="Bob"], [ID=3, Name="Charlie"]}),
    Table2 = Table.FromRecords({[ID=1, City="Bangkok"], [ID=2, City="Chiang Mai"], [ID=4, City="Phuket"]}),
    Joined = Table.Join(Table1, {"ID"}, Table2, {"ID"}, JoinKind.Inner)
in
    Joined
```

**ผลลัพธ์:** `| ID | Name    | City       |
|----|---------|-----------|
| 1  | Alice   | Bangkok   |
| 2  | Bob     | Chiang Mai|`

Inner Join แสดงเฉพาะแถวที่ ID ตรงกันในทั้งสองตาราง (Alice และ Bob) ข้ามี Charlie (ID=3) และ City Phuket (ID=4) ออกไปเพราะไม่มี ID ตรงกัน

### 2. ใช้ JoinKind.LeftOuter เพื่อเก็บข้อมูลจากตารางแรก

```excel
let
    Table1 = Table.FromRecords({[ID=1, Name="Alice"], [ID=2, Name="Bob"], [ID=3, Name="Charlie"]}),
    Table2 = Table.FromRecords({[ID=1, City="Bangkok"], [ID=2, City="Chiang Mai"], [ID=4, City="Phuket"]}),
    Joined = Table.Join(Table1, {"ID"}, Table2, {"ID"}, JoinKind.LeftOuter)
in
    Joined
```

**ผลลัพธ์:** `| ID | Name    | City        |
|----|---------|-------------|
| 1  | Alice   | Bangkok     |
| 2  | Bob     | Chiang Mai  |
| 3  | Charlie | null        |`

LeftOuter Join เก็บแถวทั้งหมดจากตารางแรก (Table1) แถวของ Charlie (ID=3) คงอยู่ แต่ City เป็น null เพราะไม่มีข้อมูลตรงกันในตารางที่สอง

### 3. ใช้ JoinKind.LeftAnti เพื่อหาข้อมูลที่ไม่ตรงกัน

```excel
let
    Table1 = Table.FromRecords({[ID=1, Name="Alice"], [ID=2, Name="Bob"], [ID=3, Name="Charlie"]}),
    Table2 = Table.FromRecords({[ID=1, City="Bangkok"], [ID=2, City="Chiang Mai"], [ID=4, City="Phuket"]}),
    Joined = Table.Join(Table1, {"ID"}, Table2, {"ID"}, JoinKind.LeftAnti)
in
    Joined
```

**ผลลัพธ์:** `| ID | Name    |
|----|----------|
| 3  | Charlie  |`

LeftAnti Join แสดงแถวจากตารางแรกที่ไม่มี ID ตรงกันในตารางที่สอง เฉพาะ Charlie (ID=3) เท่านั้น ที่ไม่มีข้อมูล City

### 4. ใช้ JoinKind.FullOuter เพื่อรวมข้อมูลทั้งหมด

```excel
let
    Table1 = Table.FromRecords({[ID=1, Name="Alice"], [ID=2, Name="Bob"], [ID=3, Name="Charlie"]}),
    Table2 = Table.FromRecords({[ID=1, City="Bangkok"], [ID=2, City="Chiang Mai"], [ID=4, City="Phuket"]}),
    Joined = Table.Join(Table1, {"ID"}, Table2, {"ID"}, JoinKind.FullOuter)
in
    Joined
```

**ผลลัพธ์:** `| ID | Name    | City        |
|----|---------|-------------|
| 1  | Alice   | Bangkok     |
| 2  | Bob     | Chiang Mai  |
| 3  | Charlie | null        |
| 4  | null    | Phuket      |`

FullOuter Join เก็บข้อมูลทั้งหมดจากทั้งสองตาราง Charlie และ Phuket (ID=4) ไม่มีการจับคู่จึงมี null

## หมายเหตุเพิ่มเติม

- ผมแนะนำให้จำว่า JoinKind.Inner เป็นประเภท Join ที่เคิร์บที่สุด มักใช้เมื่อต้องการหาข้อมูลที่เชื่อถือได้ (มีทั้งสองตารางมี) ส่วน Outer ใช้เมื่ออยากเก็บข้อมูลได้มากขึ้น

- ส่วนตัวผม ชอบใช้ LeftSemi และ LeftAnti สำหรับการตรวจสอบคุณภาพข้อมูล เช่น หาคำสั่งซื้อที่ไม่มีลูกค้า หรือหาลูกค้าที่ไม่มีคำสั่งซื้อ มันสะดวกกว่าใช้ FILTER

- อย่าลืมว่า JoinKind.RightSemi ไม่ได้เพิ่มคอลัมน์จากตารางแรก จึงต่างจาก RightOuter ตรงนี้เป็นสำคัญเวลาต้องการหาข้อมูลเฉพาะที่ตรงกันเท่านั้น

## คำถามที่พบบ่อย

**Q: ผมต้องใช้ JoinKind ประเภทไหนเวลาต้องการเก็บข้อมูลจากตารางหลักไว้ทั้งหมด?**

ใช้ JoinKind.LeftOuter ค่ะ มันเก็บแถวทั้งหมดจากตารางแรก (ตารางหลัก) แล้วเพิ่มข้อมูลจากตารางที่สอง ถ้าไม่มีข้อมูลตรงกันก็จะ null ซึ่งผมใช้วิธีนี้บ่อยที่สุดในงานประจำวัน

**Q: ความแตกต่างระหว่าง JoinKind.LeftAnti และ JoinKind.LeftSemi คืออะไร?**

ผมอธิบายแบบง่ายๆ ค่ะ: LeftAnti คือหาแถวที่ "ไม่ตรงกัน" (ข้อมูลที่หาย) ส่วน LeftSemi คือหาแถวที่ "ตรงกัน" (ข้อมูลที่มี) ทั้งสองแบบไม่ได้เพิ่มคอลัมน์จากตารางที่สอง เลย เอาไว้กรองข้อมูลเท่านั้น

**Q: ผมจะรู้ได้ยังไงว่าต้องใช้ JoinKind ประเภไหน?**

ส่วนตัวผม มีวิธีง่ายๆ: ถ้าอยากเก็บข้อมูลจากตารางไหนไว้ทั้งหมด ให้ใช้ LeftOuter (ตารางแรก) หรือ RightOuter (ตารางที่สอง) ถ้าอยากรวมทั้งหมด ใช้ FullOuter ถ้าอยากหาข้อมูลที่ไม่ตรงกัน ใช้ Anti

## แหล่งข้อมูลเพิ่มเติม

- [Microsoft Learn: JoinKind.Type](https://learn.microsoft.com/en-us/powerquery-m/joinkind-type) _(official)_
- [Microsoft Learn: Table.Join](https://learn.microsoft.com/en-us/powerquery-m/table-join) _(official)_

---

_Source: [https://www.thepexcel.com/functions/power-query/enumerations/joinkind-type/](https://www.thepexcel.com/functions/power-query/enumerations/joinkind-type/)_
