বেঞ্চমার্ক-এ একাধিক সারি রিটার্ন করলে এরর হবে। একাধিক সারির পরিবর্তে স্কেলার ভ্যালু বা একক সারি রিটার্ন করুন। সিনট্যাক্স নিচে দেওয়া হলো:
SELECT yourColumnName FROM yourTableName WHERE yourCondition.
এটি বুঝতে একটি টেবিল তৈরি করা যাক। টেবিল তৈরির কোয়েরি:
mysql> create table UserDemo
-> (
-> UserId int,
-> UserName varchar(20),
-> RegisteredCourse varchar(10)
-> ); Query OK, 0 rows affected (0.67 sec)
ইনসার্ট কমান্ড দিয়ে কিছু রেকর্ড ইনসার্ট করা যাক। কোয়েরিটি হলো:
mysql> insert into UserDemo values(1,'John','Java'); Query OK, 1 row affected (0.16 sec) mysql> insert into UserDemo values(2,'Larry','C'); Query OK, 1 row affected (0.21 sec) mysql> insert into UserDemo values(3,'Carol','C++'); Query OK, 1 row affected (0.11 sec) mysql> insert into UserDemo values(4,'Mike','C#'); Query OK, 1 row affected (0.17 sec)
সিলেক্ট স্টেটমেন্ট দিয়ে সব রেকর্ড দেখানো যাক। কোয়েরিটি হলো:
mysql> select *from UserDemo;
আউটপুট নিচে দেওয়া হলো:
+--------+----------+------------------+ | UserId | UserName | RegisteredCourse | +--------+----------+------------------+ | 1 | John | Java | | 2 | Larry | C | | 3 | Carol | C++ | | 4 | Mike | C# | +--------+----------+------------------+ 4 rows in set (0.00 sec)
আপনার বেঞ্চমার্ক এরর নিচে দেওয়া হলো:
mysql> select benchmark(1000,(select RegisteredCourse from UserDemo)); ERROR 1242 (21000): Subquery returns more than 1 row
যেহেতু সাবকোয়েরি একাধিক সারি রিটার্ন করেছে, তাই আপনাকে একক সারি রিটার্ন করতে হবে। কোয়েরিটি হলো:
mysql> select RegisteredCourse from UserDemo where UserId=1;
আউটপুট নিচে দেওয়া হলো:
+------------------+ | RegisteredCourse | +------------------+ | Java | +------------------+ 1 row in set (0.00 sec)
ব্যাখ্যা: BENCHMARK(count, expr) ফাংশনে expr এক এক্সপ্রেশন হতে হবে যা একক ভ্যালু (স্কেলার) রিটার্ন করে। সাবকোয়েরি যদি একাধিক সারি রিটার্ন করে, তবে ERROR 1242 হয়। সমাধান: সাবকোয়েরিতে LIMIT 1 যোগ করুন বা নির্দিষ্ট কন্ডিশন (যেমন WHERE UserId=1) দিয়ে একক সারি নিশ্চিত করুন। পারফরম্যান্স টেস্টিং-এ BENCHMARK ব্যবহার করা হয় কিন্তু প্রোডাকশনে এটি রিকমেন্ডেড নয়।