เมื่อตารางมีข้อมูลซ้ำในคอลัมน์ (เช่น ชื่อพนักงานซ้ำกัน) การค้นหาแถวเฉพาะต้องระบุเงื่อนไขหลายคอลัมน์พร้อมกันด้วย AND เพื่อให้ได้ผลลัพธ์ที่แม่นยำ
ตัวอย่างการใช้งาน
สร้างตารางพนักงาน:
mysql> CREATE TABLE DemoTable1431 (
-> EmployeeId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> EmployeeName VARCHAR(20),
-> EmployeeCountryName VARCHAR(20)
-> );
เพิ่มข้อมูล (มีชื่อ Chris Brown ซ้ำ 2 รายการ ประเทศต่างกัน):
mysql> INSERT INTO DemoTable1431 (EmployeeName, EmployeeCountryName) VALUES ('Adam Smith', 'AUS');
mysql> INSERT INTO DemoTable1431 (EmployeeName, EmployeeCountryName) VALUES ('Chris Brown', 'US');
mysql> INSERT INTO DemoTable1431 (EmployeeName, EmployeeCountryName) VALUES ('John Doe', 'UK');
mysql> INSERT INTO DemoTable1431 (EmployeeName, EmployeeCountryName) VALUES ('Chris Brown', 'AUS');
ดูข้อมูลทั้งหมด:
mysql> SELECT * FROM DemoTable1431; +------------+--------------+---------------------+ | EmployeeId | EmployeeName | EmployeeCountryName | +------------+--------------+---------------------+ | 1 | Adam Smith | AUS | | 2 | Chris Brown | US | | 3 | John Doe | UK | | 4 | Chris Brown | AUS | +------------+--------------+---------------------+
ค้นหาเฉพาะ Chris Brown ที่อยู่ใน AUS:
mysql> SELECT * FROM DemoTable1431
-> WHERE EmployeeName = 'Chris Brown' AND EmployeeCountryName = 'AUS';
ผลลัพธ์ได้เพียง 1 แถวที่ตรงกับเงื่อนไขทั้งสอง:
+------------+--------------+---------------------+ | EmployeeId | EmployeeName | EmployeeCountryName | +------------+--------------+---------------------+ | 4 | Chris Brown | AUS | +------------+--------------+---------------------+
เทคนิคเพิ่มเติมสำหรับข้อมูลซ้ำ
- DISTINCT: ดึงค่าที่ไม่ซ้ำกัน
SELECT DISTINCT EmployeeName FROM DemoTable1431 - GROUP BY: จัดกลุ่มข้อมูลซ้ำ
SELECT EmployeeName, COUNT(*) FROM DemoTable1431 GROUP BY EmployeeName - ROW_NUMBER() (MySQL 8.0+): ให้ลำดับแถวในแต่ละกลุ่ม เพื่อเลือกแถวแรก/สุดท้าย
- LIMIT 1: ดึงแค่แถวแรกที่เจอ (เหมาะสำหรับเช็คว่ามีหรือไม่)
แนวทางปฏิบัติที่ดี
- ออกแบบตารางให้มี Primary Key หรือ Unique Constraint เพื่อป้องกันข้อมูลซ้ำที่ไม่ต้องการ
- ใช้ Index บนคอลัมน์ที่ค้นหาบ่อยเพื่อเพิ่มประสิทธิภาพ
- พิจารณา Normalization แยกตารางประเทศออกมาเป็นตารางอ้างอิง