ข้อผิดพลาดเกิดขึ้นเมื่อ Subquery ใน BENCHMARK() คืนค่าหลายแถว ต้องคืนค่า Scalar (ค่าเดียว) หรือ Single Row เท่านั้น
รูปแบบที่ถูกต้อง
SELECT yourColumnName FROM yourTableName WHERE yourCondition;
ตัวอย่างข้อผิดพลาด
สร้างตารางและเพิ่มข้อมูล 4 แถว:
mysql> CREATE TABLE UserDemo ( UserId INT, UserName VARCHAR(20), RegisteredCourse VARCHAR(10) ); INSERT INTO UserDemo VALUES(1,'John','Java'),(2,'Larry','C'),(3,'Carol','C++'),(4,'Mike','C#');
รัน BENCHMARK ด้วย Subquery ที่คืนหลายแถว:
mysql> SELECT BENCHMARK(1000, (SELECT RegisteredCourse FROM UserDemo)); ERROR 1242 (21000): Subquery returns more than 1 row
วิธีแก้: จำกัดให้คืน 1 แถว
mysql> SELECT RegisteredCourse FROM UserDemo WHERE UserId = 1;
+------------------+ | RegisteredCourse | +------------------+ | Java | +------------------+ 1 row in set (0.00 sec)
จากนั้นใช้ค่านี้ใน BENCHMARK:
mysql> SELECT BENCHMARK(1000, (SELECT RegisteredCourse FROM UserDemo WHERE UserId = 1));
สรุป: Subquery ใน BENCHMARK() ต้องคืนค่าเพียง 1 ค่า (Scalar) ใช้ WHERE LIMIT 1 หรือ Aggregate Function