একাধিক শর্ত পূরণ করে এমন রো বের করতে (যেমন: একই RoomId-এ ServiceId ১০, ২০, ৩০ সবই থাকতে হবে) GROUP BY সাথে HAVING ক্লজ ব্যবহার করুন।
উদাহরণ দিয়ে বুঝি
টেবিল তৈরি করুন:
mysql> CREATE TABLE MergingSelectDemo (
-> RoomServicesId INT,
-> RoomId INT,
-> ServiceId INT
-> );
Query OK, 0 rows affected (1.98 sec)
রেকর্ড ইনসার্ট করুন:
mysql> INSERT INTO MergingSelectDemo VALUES(10, 10, 10);
mysql> INSERT INTO MergingSelectDemo VALUES(20, 10, 20);
mysql> INSERT INTO MergingSelectDemo VALUES(30, 10, 30);
mysql> INSERT INTO MergingSelectDemo VALUES(50, 10, 50);
mysql> INSERT INTO MergingSelectDemo VALUES(110, 20, 20);
mysql> INSERT INTO MergingSelectDemo VALUES(120, 20, 30);
সকল রেকর্ড:
mysql> SELECT * FROM MergingSelectDemo;
+----------------+--------+-----------+
| RoomServicesId | RoomId | ServiceId |
+----------------+--------+-----------+
| 10 | 10 | 10 |
| 20 | 10 | 20 |
| 30 | 10 | 30 |
| 50 | 10 | 50 |
| 110 | 20 | 20 |
| 120 | 20 | 30 |
+----------------+--------+-----------+
6 rows in set (0.00 sec)
যে RoomId-এ ServiceId ১০, ২০, ৩০ - তিনটি সকলই আছে
mysql> SELECT RoomId
-> FROM MergingSelectDemo
-> WHERE ServiceId IN(10, 20, 30)
-> GROUP BY RoomId
-> HAVING COUNT(*) = 3;
+--------+
| RoomId |
+--------+
| 10 |
+--------+
1 row in set (0.15 sec)
ব্যাখ্যা:
WHERE ServiceId IN(10,20,30)- শুধু এই তিনটি সার্ভিসের রো ফিল্টার করেGROUP BY RoomId- RoomId অনুযায়ী গ্রুপ করেHAVING COUNT(*) = 3- যেই গ্রুপে ঠিক ৩টি রো আছে (অর্থাৎ তিনটি সার্ভিসই আছে) সেটি বেছে নেয়
RoomId=20-এ ServiceId ১০ নেই, তাই COUNT=২ হয় এবং ফিল্টার আউট হয়ে যায়।
নোট: যদি ডুপ্লিকেট সার্ভিস থাকতে পারে, তবে HAVING COUNT(DISTINCT ServiceId) = 3 ব্যবহার করুন।