栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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上使用MySQL 5.1.48对这个查询进行了210万行查询(PostTag的Stack Overflow
7月数据转储),它在1.08秒内返回了结果。在分配了足够内存的体面服务器上

innodb_buffer_pool_size
,它甚至应该更快。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/385207.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号