Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用另一个表中的行筛选查询的输出_Mysql_Sql - Fatal编程技术网

Mysql 使用另一个表中的行筛选查询的输出

Mysql 使用另一个表中的行筛选查询的输出,mysql,sql,Mysql,Sql,我需要一些代码方面的帮助 我有两张名为stuff之类的表格,我有以下信息: stuff something +-------------+---------------------+ +-------------+---------------------+ | member_id | group_id | | group_id | some_id

我需要一些代码方面的帮助

我有两张名为stuff之类的表格,我有以下信息:

               stuff                                  something
+-------------+---------------------+    +-------------+---------------------+
| member_id   |     group_id        |    |  group_id   |      some_id        |
+-------------+---------------------+    +-------------+---------------------+
|      11     |         aa          |    |      aa     |         7           |
|      11     |         bb          |    |      dd     |         8           |
|      22     |         bb          |    |      bb     |         9           |
|      11     |         cc          |    +-------------+---------------------+
|      22     |         cc          |
|      33     |         cc          |
|      11     |         dd          |
+-------------+---------------------+
此查询:

SELECT  group_id
FROM    stuff a
WHERE   member_id IN (11)  -- <<== list of member_id (can be 11,22 or 22,33 or 11,22,33)
    AND
    EXISTS
    (
      SELECT group_id
      FROM stuff b
      WHERE a.group_id = b.group_id
      GROUP BY group_id
      HAVING COUNT(*) = 1                   -- <<== number of member_id
    )
GROUP   BY group_id
HAVING  COUNT(*) = 1                            -- <<== number of member_id
将返回aa和dd


我的问题是:如果某个id=7,如何过滤结果?

您的问题相当令人困惑。似乎简单的连接应该可以工作:

SELECT s.group_id
FROM stuff s 
    INNER JOIN something so ON s.group_id = so.group_id 
WHERE s.member_id = 11 AND
    so.some_id = 7

我觉得很奇怪

请尝试以下方法:

SELECT * //or whatever
FROM stuff 
JOIN something ON stuff.group_id=something.group_id 
WHERE something.some_id=7 AND stuff.member_id IN (11);
这将返回:

member_id    |    group_id    |    some_id    |
-----------------------------------------------
    11              aa                7

这将返回aa…我想要的

乍一看,代码似乎一团糟。你能用你期望的输出以表格形式更新这个问题吗?根据你上一次的评论,你只是试图从某物表中获取给定某物id的组id值。你不需要连接。你在那个查询上到底在做什么?考虑到你的预期输出,从某个组id=?中选择组id有什么问题。我更改了问题,你能更新吗?你们所有人,可以检查我的答案,了解我自己的问题!我改了问题,你的答案不好,你能更新吗?我改了。基本上你要做的就是改变WHERE标准。不,11中的WHERE成员id可以是11中的WHERE成员id,22,让COUNT*=2,那么查询将返回bb,我也更新了表中的某些内容…检查上面你刚才说的所有内容都被一个事实否定了,即你想要筛选一些\u id=7,你想要一个结果,其中成员\u id为11,一些\u id=7。这意味着这两个条件都必须为真。真正的问题是您的查询过于复杂。你为什么不告诉我们你期望的结果,我们可以给你一个查询。我改变了问题,你的答案不好,你能更新吗?
SELECT  `group_id`
FROM    `stuff` a
WHERE   `member_id` IN (11) -- <<== list of member_id (can be 11,22 or 22,33 or 11,22,33)
AND
EXISTS
(
    SELECT  `group_id`
    FROM    `stuff` b
    WHERE a.`group_id` = b.`group_id`
    AND
    EXISTS
    (
        SELECT  c.`group_id`
        FROM      `something` c
        WHERE   c.`group_id` = b.`group_id`
        AND     c.`some_id`=7                        -- <<== number of some_id=7
    )  
    GROUP BY `group_id`
    HAVING COUNT(*) = 1               -- <<== number of member_id
)
GROUP   BY `group_id`
HAVING  COUNT(*) =1               -- <<== number of member_id