亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

選擇滿足不同行的不同條件的值?

選擇滿足不同行的不同條件的值?

慕尼黑的夜晚無繁華 2019-07-27 14:15:32
選擇滿足不同行的不同條件的值?這是一個非?;镜牟樵?,我想不出.假設我有一個像這樣的兩列表:userid  |  roleid    1    |    1    1    |    2    1    |    3    2    |    1我想得到所有不同的用戶roleids使用上面的例子,我希望返回的唯一結果是userid1.我如何做到這一點?
查看完整描述

3 回答

?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

SELECT userid

FROM UserRole

WHERE roleid IN (1, 2, 3)

GROUP BY userid

HAVING COUNT(DISTINCT roleid) = 3;

讀到這篇文章的人:我的答案簡單明了,并且獲得了“接受”的狀態,但是請你去讀一下回答由@Cletus提供。它的性能要好得多。


在大聲思考時,@Cletus描述的另一種書寫自我連接的方法是:


SELECT t1.userid

FROM userrole t1

JOIN userrole t2 ON t1.userid = t2.userid

JOIN userrole t3 ON t2.userid = t3.userid

WHERE (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它應該更快。




查看完整回答
反對 回復 2019-07-29
  • 3 回答
  • 0 關注
  • 321 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號