选择满足不同行的不同条件的值?

选择满足不同行的不同条件的值?

这是一个非常基本的查询,我想不出.

假设我有一个像这样的两列表:

userid  |  roleid
   1    |    1
   1    |    2
   1    |    3
   2    |    1

我想得到所有不同的用户roleids使用上面的例子,我希望返回的唯一结果是userid1.我如何做到这一点?


慕尼黑的夜晚无繁华
浏览 295回答 3
3回答

函数式编程

SELECT useridFROM UserRoleWHERE roleid IN (1, 2, 3)GROUP BY useridHAVING COUNT(DISTINCT roleid) = 3;读到这篇文章的人:我的答案简单明了,并且获得了“接受”的状态,但是请你去读一下回答由@Cletus提供。它的性能要好得多。在大声思考时,@Cletus描述的另一种书写自我连接的方法是:SELECT t1.useridFROM userrole t1JOIN userrole t2 ON t1.userid = t2.useridJOIN userrole t3 ON t2.userid = t3.useridWHERE (t1.roleid, t2.roleid, t3.roleid) = (1, 2, 3);对于您来说,这可能更容易阅读,MySQL支持对这样的元组进行比较。MySQL还知道如何为该查询智能地使用覆盖索引。只要把它做完就行了EXPLAIN请参阅所有三个表的注释中的“使用索引”,这意味着它正在读取索引,甚至不必触摸数据行。我在我的Macbook上使用MySQL5.1.48运行了这个查询超过210万行(PostTags的Stack溢出七月数据转储),并在1.08秒内返回了结果。在一个有足够内存分配给innodb_buffer_pool_size它应该更快。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL