我有两张桌子tbl_group和tbl_members。下面是这两个表的快照。
+----+------------+
| id | groupTitle |
+----+------------+
| 1 | Group 1 |
| 2 | Group 2 |
+----+------------+
+----+---------+--------+
| id | groupId | userId |
+----+---------+--------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 1 |
| 5 | 2 | 2 |
+----+---------+--------+现在我想用userId 3,2再创建一个组,但在此之前,我想检查是否有任何组具有相同的成员3和2,而不是其他成员。
我使用了IN子句,但它不起作用。
SELECT DISTINCT groupId
FROM tbl_members
WHERE userId IN (3,2)它将返回两个组,尽管结果将为空。
发布于 2018-12-19 14:08:18
我们可以尝试使用带有EXISTS子句的INSERT INTO ... SELECT,该子句断言userId为2/3的情况尚未出现在任何组中。
INSERT INTO tbl_members (groupId, userId)
SELECT groupId, userId
FROM (
SELECT 3 AS groupId, 2 AS userId UNION ALL SELECT 3, 3
) t
WHERE NOT EXISTS (SELECT 1 FROM tbl_members
WHERE userId IN (2, 3)
GROUP BY groupId
HAVING MIN(userId) <> MAX(userId));您还必须在新组的tbl_group表中插入一条新记录。
发布于 2018-12-19 14:19:27
SELECT DISTINCT groupId FROM tbl_members WHERE userId = '2'
INTERSECT
SELECT DISTINCT groupId FROM tbl_members WHERE userId = '3'发布于 2018-12-19 15:16:14
一种方法是使用带有HAVING子句的GROUP BY来使用基于条件聚合的过滤。我们将使用一个查询来获取仅具有userId值3和2的groupId值。如果查询没有返回任何这样的值;这意味着不存在这样的group;因此您可以创建该组。
SELECT
groupId
FROM tbl_members
GROUP BY groupId
HAVING SUM(userId = 2) AND /* userID 2 exists */
SUM(userId = 3) AND /* userID 3 exists */
NOT SUM(userId NOT IN (2,3)) /* No other userId exists (other than 2,3) */https://stackoverflow.com/questions/53845376
复制相似问题