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