Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

การ Merge SELECT หลายคิวรี่ใน MySQL ด้วย GROUP BY และ HAVING

ใช้ 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 = ครบทุกค่า