'Is there a way to compare multiple rows in MySQL
I have three tables, room table, item table and user table.
item table has column room_id and user_id
table data example is like this:
| room_id | user_id |
|---|---|
| First Room | 1111 |
| First Room | 2222 |
| Second Room | 1111 |
| Second Room | 2222 |
| Second Room | 3333 |
| Second Room | 4444 |
| Third Room | 2222 |
And I want to find room_id where exactly matching member group
Example:
input: [11111, 22222], output: First Room
input: [22222], output: Third Room
input: [11111, 22222, 3333], output: Not Exists
In MySQL, How can I find it?
Thanks.
Solution 1:[1]
We can try the following aggregation approach. For users 1111 and 2222:
SELECT room_id
FROM yourTable
GROUP BY room_id
HAVING COUNT(DISTINCT user_id) = 2 AND
SUM(user_id NOT IN ('1111', '2222')) = 0;
The count restriction ensures that there are 2 and only 2 users in the room. The sum restriction makes sure that nobody else besides users 1111 and 2222 are in a matching room.
Solution 2:[2]
SELECT room_id
FROM rooms
GROUP BY room_id
HAVING GROUP_CONCAT(DISTINCT user_id) = {sorted CSV list of distinct input values}
For example, for (citate) input: [11111, 22222] it will be
SELECT room_id
FROM rooms
GROUP BY room_id
HAVING GROUP_CONCAT(DISTINCT user_id) = '11111,22222';
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Tim Biegeleisen |
| Solution 2 | Akina |
