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