ใช้ GROUP BY ร่วมกับ HAVING COUNT(*) เพื่อหาค่าที่ตรงเงื่อนไขทั้งหมดใน IN clause (Relational Division)
ตัวอย่างการใช้งาน
สร้างตาราง MergingSelectDemo:
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),(20,10,20),(30,10,30),(50,10,50),(110,20,20),(120,20,30);
ข้อมูล:
+----------------+--------+-----------+ | RoomServicesId | RoomId | ServiceId | +----------------+--------+-----------+ | 10 | 10 | 10 | | 20 | 10 | 20 | | 30 | 10 | 30 | | 50 | 10 | 50 | | 110 | 20 | 20 | | 120 | 20 | 30 | +----------------+--------+-----------+
หา RoomId ที่มี ServiceId ครบ 10, 20, 30 ทั้ง 3 ค่า:
mysql> SELECT RoomId FROM MergingSelectDemo
-> WHERE ServiceId IN(10,20,30)
-> GROUP BY RoomId
-> HAVING COUNT(*) = 3;
ผลลัพธ์:
+--------+ | RoomId | +--------+ | 10 | +--------+
RoomId=10 มี ServiceId 10,20,30 ครบ 3 ค่า ส่วน RoomId=20 มีแค่ 20,30 (ขาด 10)
หลักการ: นับจำนวนแถวที่ตรง IN clause ต่อกลุ่ม หากเท่ากับจำนวนค่าใน IN clause = ครบทุกค่า