MYSQL - 当不同表上的所有行都存在时,在表上查找值

时间:2015-10-18 11:46:19

标签: mysql sql database join

很抱歉,如果标题出现错误,那么现在已经停留了一段时间了,我的大脑很好,并且在这一点上真的很疲惫..

我简单地将问题简化为基础知识。有2张桌子..

TABLE A
------------
-id

TABLE B
-------------
-table_a_fk
-user_id

我正在尝试使用user_ids列表找到表A的ID ...并且只有当表B中存在所有用户的条目时...

因此,如果user_ids为10,11,12,则如果表B具有相同table_a_fk的用户10,11,12的行,则查询将仅返回结果。同样重要的是,如果有额外的条目(即用户10,11,12,13,14)在表B中具有相同的table_a_fk,那么这不会返回..它需要是完全匹配。

我开始认为我需要的是不可能只是在MYSQL中我需要用更一般的搜索来处理行...我希望你们中的一个SQL大师来证明我错了;)< / p>

非常感谢您提供帮助和建议

更新:刚刚实现了在此查询中甚至可能不需要表A ...就像user_ids全部匹配一样,table_a_fk的值与从表A中获取的值相同。

就像我说我的大脑不工作ata aha ...感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

这是set-with-set查询的示例。我想使用group byhaving处理此问题:

select table_a_fk
from b
group by table_a_fk
having sum( b.user_id in (10, 11, 12) ) = 3 and
       count(*) = 3;

您需要调整in列表和3以匹配您关注的用户列表以及此类用户的数量。这假设表中没有重复项。