mysql - 如何在 Where 子句中使用 IN 查找精确的行匹配?

标签 mysql sql chat

我有两个表 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 |
+----+---------+--------+

现在我想再创建一个用户 ID 为 3,2 的组,但在此之前我想检查是否有任何组具有相同的成员 3 和 2 而不是任何其他组。

我使用了 IN 子句,但它不起作用。

SELECT DISTINCT groupId 
FROM tbl_members 
WHERE userId IN (3,2)

虽然结果为空,但它返回了两个组。

最佳答案

我们可以尝试将 INSERT INTO ... SELECTEXISTS 子句一起使用,该子句断言 2/3 的 userId 尚未出现对于任何组。

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 表中。

关于mysql - 如何在 Where 子句中使用 IN 查找精确的行匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53845376/

相关文章:

PHP 套接字服务器与 node.js : Web Chat

android - 创建用户时 XMPP jid-malformed(400) 错误 Android

mysql - Grails 域是否可能没有 'id' ?

mysql - 如何在一个 SQL 查询中获取任意递归深度的祖先 id?

mysql - 将mySQL数据结构转移到新的关系数据库中(与关系表以逗号分隔)

sql - Oracle SQL 查询 - 使用 MAX() 函数时加入

mysql - 如何在MySQL中实现具有共同属性的两个实体?

java - 如何获取用户在 Appolozic 中聊天的联系人列表?

mysql - 如何在存储过程中声明保存选择查询结果的变量?

php - 在 MySQL 中选择时间范围时出现问题