ปัญหา: IN() ไม่ใช่ Range
IN(4,10) คืนแค่ 4 และ 10 → ไม่ได้คืน 5,6,7,8,9
แก้ด้วย BETWEEN (Inclusive)
SELECT * FROM table WHERE column BETWEEN 4 AND 10;
คืน 4,5,6,7,8,9,10 (รวมปลายทั้งสอง)
ตัวอย่าง
สร้างตาราง 1-15
mysql> create table SelectInWithBetweenDemo (PortalId int); mysql> insert into SelectInWithBetweenDemo values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15);
IN(4,10) → ได้แค่ 2 แถว
mysql> select PortalId from SelectInWithBetweenDemo where PortalId IN(4,10);
+----------+ | PortalId | +----------+ | 4 | | 10 | +----------+
BETWEEN 4 AND 10 → ได้ 7 แถว
mysql> select PortalId from SelectInWithBetweenDemo where PortalId BETWEEN 4 AND 10;
+----------+ | PortalId | +----------+ | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | +----------+
Exclusive Range (ไม่รวมปลาย)
SELECT * FROM table WHERE column > 4 AND column < 10;
+----------+ | PortalId | +----------+ | 5 | | 6 | | 7 | | 8 | | 9 | +----------+
สรุป
| Operator | รวมปลาย | ตัวอย่าง |
|---|---|---|
| BETWEEN | ใช่ | 4 ถึง 10 → 4,5,6,7,8,9,10 |
| > AND < | ไม่ | >4 AND <10 → 5,6,7,8,9 |
| IN | เฉพาะค่าระบุ | IN(4,10) → 4,10 |