首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Where子句中使用IN查找精确的行匹配?

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

Stack Overflow用户
提问于 2018-12-19 13:58:57
回答 6查看 92关注 0票数 2

我有两张桌子tbl_group和tbl_members。下面是这两个表的快照。

代码语言:javascript
复制
+----+------------+
| 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子句,但它不起作用。

代码语言:javascript
复制
SELECT DISTINCT groupId 
FROM tbl_members 
WHERE userId IN (3,2)

它将返回两个组,尽管结果将为空。

EN

回答 6

Stack Overflow用户

发布于 2018-12-19 14:08:18

我们可以尝试使用带有EXISTS子句的INSERT INTO ... SELECT,该子句断言userId为2/3的情况尚未出现在任何组中。

代码语言:javascript
复制
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表中插入一条新记录。

票数 0
EN

Stack Overflow用户

发布于 2018-12-19 14:19:27

代码语言:javascript
复制
SELECT DISTINCT groupId FROM tbl_members WHERE userId = '2'
INTERSECT
SELECT DISTINCT groupId FROM tbl_members WHERE userId = '3'
票数 0
EN

Stack Overflow用户

发布于 2018-12-19 15:16:14

一种方法是使用带有HAVING子句的GROUP BY来使用基于条件聚合的过滤。我们将使用一个查询来获取仅具有userId值3和2的groupId值。如果查询没有返回任何这样的值;这意味着不存在这样的group;因此您可以创建该组。

代码语言:javascript
复制
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) */
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53845376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档