我有两张tabletbl\ U组和tbl\ U成员。这是两个表的快照。
+----+------------+
| 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 |
+----+---------+--------+
现在我想用userid3,2再创建一个组,但在此之前,我想检查是否有任何组具有相同的成员3和2,而不是任何其他成员。
我用了in子句,但它不起作用。
SELECT DISTINCT groupId
FROM tbl_members
WHERE userId IN (3,2)
它返回两个组,尽管结果为空。
6条答案
按热度按时间lnvxswe21#
ih99xse12#
第一个内部查询将确定所有获取的组只有两个成员,这将减少不必要的记录集,然后第二个内部查询获取该组id并检查该组中是否没有其他成员3,2,最后整个查询将给出只有3,2作为成员的组id。
bgibtngc3#
我们可以试着用
INSERT INTO ... SELECT
带着一个EXISTS
AssertuserId
任何组都不会出现2/3。您还必须在
tbl_group
新组的表。r55awzrz4#
我认为这个查询将给出
userid
(2,3),groupid
(2,3)从表中e3bfsja25#
一种方法是使用基于条件聚合的过滤
GROUP BY
与HAVING
条款。我们将使用查询来获取groupId
有价值的userId
仅限值3和2。如果查询没有返回任何这样的值;这意味着不存在这样的群体;因此可以创建组。3ks5zfa06#
这将返回groupid,其中组中只有2和3。组中所有userid的计数-如果组中没有其他userid,则userid=2或3的记录的总和必须为0。
当然,只有当2和3在同一组中不重复时,这才有效。