【问题标题】:MYSQL - Finding value on table when all rows on different table existMYSQL - 当不同表上的所有行都存在时在表上查找值
【发布时间】:2015-10-18 11:46:19
【问题描述】:

对不起,如果标题有点错误现在卡在这上面一段时间了,我的大脑在这一点上很好,真的很疲惫..

我已将问题简化为基础知识。有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 的行时才会返回结果。同样重要的是,如果表 B 中存在具有相同 table_a_fk 的额外条目(即用户 10、11、12、13、14),那么这不会返回。它需要完全匹配。

我开始认为我需要的只是在 MYSQL 中是不可能的,我需要通过更一般的搜索来处理这些行......不过希望你们中的一位 SQL 专家证明我错了;)

非常感谢您的帮助和建议

更新:刚刚意识到在此查询中甚至可能不需要表 A...好像 user_ids 都匹配,那么 table_a_fk 的值将与从表 A 中获取的值相同。

就像我说的那样,我的大脑无法正常工作啊哈……感谢您的帮助!

【问题讨论】:

    标签: mysql sql database join


    【解决方案1】:

    这是一个 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 以匹配您关心的用户列表和此类用户的数量。这假定表中没有重复项。

    【讨论】:

    • 出色的答案.. 下次我会通过集合查询来研究集合.. 无论如何现在都已经过测试并且工作正常.. 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 2018-06-25
    • 2010-12-19
    • 1970-01-01
    • 2015-01-21
    • 2012-08-18
    相关资源
    最近更新 更多