翻譯|行業資訊|編輯:鮑佳佳|2020-07-10 17:01:53.987|閱讀 369 次
概述:在數據庫開發和管理中,獲取具有特定值的行是相當常見的任務。這聽起來像是在公園里散步,但是聽起來與將結果限制在那些只具有一個值而不能將其他值排除在外的行相比更棘手。原因是,雖然使用!=或NOT IN這些比較運算符過濾掉值會更簡單,但是它們僅隱藏值,而不是告訴我們實體是否擁有其他值。好消息是,有一種簡單的方法可以做到這一點。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在數據庫開發和管理中,獲取具有特定值的行是相當常見的任務。這聽起來像是在公園里散步,但是聽起來與將結果限制在那些只具有一個值而不能將其他值排除在外的行相比更棘手。原因是,雖然使用!=或NOT IN這些比較運算符過濾掉值會更簡單,但是它們僅隱藏值,而不是告訴我們實體是否擁有其他值。好消息是,有一種簡單的方法可以做到這一點。閱讀,了解如何!
按角色選擇用戶所有數據庫以及大多數應用程序擁有的一件事就是用戶。特別是,數據庫用戶傾向于扮演不同的角色。(盡管應用程序用戶也可以扮演角色。)以下是Navicat的表設計器中此類表的示例:
user_roles_table_design
role_id_equal_to_1
問題在于上述查詢僅列出了role_id為1的用戶。它并不能解決他們是否也具有其他role_id。此外,添加其他條件(例如)AND role_id NOT IN (2,3,4,5,6,7,8,9)也無濟于事,因為1顯然不是任何其他數字!
那么,如何將用戶限制為只有role_id為1且沒有其他角色的用戶?
列出一個具有特定用戶角色的正確方法
嗯,從技術上講這不是“正確的方法”,因為肯定還有其他人。該解決方案包括計算每個用戶的行數。這個想法是,如果一個用戶擁有我們感興趣的role_id并且表中只有一行,那么他們就是我們想要在結果中看到的人。
我們可以使用GROUP BY獲得表中每個用戶的user_id計數。然后,HAVING子句可以檢查用戶只有一行,并且他/她的一個role_id是我們想要的:
final_query
現在,我們只看到一個role_id為1的用戶,沒有其他用戶!
結論
這種方法的優點在于,可以輕松地對其進行修改,以查找表中包含多個值或超過一定數量的行。
對Navicat Premium感興趣?您可以免費試用 14天,以進行評估!
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn