首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL select基于select

MYSQL select基于select
EN

Stack Overflow用户
提问于 2011-09-11 02:10:30
回答 4查看 143关注 0票数 3

你能帮上忙我会很感激的..。如果我有下表和示例数据...myGroupTable

代码语言:javascript
复制
group\_Id : user\_Id 
代码语言:javascript
复制
1 : 3 
代码语言:javascript
复制
1 : 7 
代码语言:javascript
复制
1 : 100 
代码语言:javascript
复制
2 : 3 
代码语言:javascript
复制
2 : 7 
代码语言:javascript
复制
2 : 100 
代码语言:javascript
复制
2 : 104 
代码语言:javascript
复制
4 : 42 
代码语言:javascript
复制
4 : 98 
代码语言:javascript
复制
4 : 13

我想要一条sql语句,它可以...返回一个恰好包含指定user_Id的group_Id。例如。是否有user_Id为3、7和100的group_Id的答案: group_id 1。请注意,我不希望它返回group_Id 2,因为它的user_Id也是104……关于J的Kind

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-11 03:19:14

这是另一种选择:

代码语言:javascript
复制
SELECT group_id, GROUP_CONCAT(user_id ORDER BY user_id) AS user_id_list
FROM group_user
GROUP BY group_id
HAVING user_id_list = '3,7,100'
票数 1
EN

Stack Overflow用户

发布于 2011-09-11 02:42:25

代码语言:javascript
复制
SELECT
    group_Id,
    SUM(
        IF user_Id = 3 THEN 1
        ELSEIF user_Id = 7 THEN 2
        ELSEIF user_Id = 100 THEN 4
        ELSE 8
    ) AS bits
FROM myGroupTable
GROUP BY group_Id
HAVING bits=7

这假设你不能对同一个group_Id有重复的user_Ids,例如这永远不会发生:

代码语言:javascript
复制
group     user
   1         3
   1         3

编辑:您可以通过以下方式构建查询:

代码语言:javascript
复制
<?php
$ids = array(3, 7, 100);
$power = 2;
$query = "
    SELECT
    group_Id,
    SUM(
        IF user_Id = " .$ids[0]. " THEN 1 ";
foreach ($id in $ids) { 
    $query .= " ELSEIF user_Id = $id THEN " . $power;
    $power = $power * 2;
}
$query .= " ELSE $power
    ) AS bits
    FROM myGroupTable
    GROUP BY group_Id
    HAVING bits = " . ($power - 1);
票数 2
EN

Stack Overflow用户

发布于 2011-09-11 03:43:17

另一种解决方案:

从TB1 WHERE group_id NOT IN (SELECT DISTINCT group_id FROM tbl WHERE user_id NOT IN(3,7,100))和user_id IN (3,7,100)中选择group;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7373635

复制
相关文章

相似问题

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