MySQL如何實(shí)現(xiàn)兩張表取差集
MySQL兩張表取差集
業(yè)務(wù)場(chǎng)景如下:
人員表中有證件號(hào)、手機(jī)號(hào)字段,這兩個(gè)字段因?yàn)樯婕暗絺€(gè)人隱私問(wèn)題,因此加密存儲(chǔ),有另外一張解密表可以和人員表進(jìn)行關(guān)聯(lián),查出解密后的證件號(hào)和手機(jī)號(hào),現(xiàn)在需要統(tǒng)計(jì)出人員表中有多少?zèng)]有加密的數(shù)據(jù),進(jìn)行再次加密處理,這個(gè)時(shí)候,考慮到的就是求兩張表的差集,來(lái)找出未加密的人員。
求差集 SQL 腳本
select p.* from persons p left join CERT_CNO_PNO_TAB c ON c.PERSON_BUSINESS_ID = p.id where p.`status` = 'person.status.allow.yes' and p.del_flag = '0' and c.id is null;
注意看,where 語(yǔ)句的最后一個(gè)條件。通過(guò) left join 連表之后,再使用右表的 c.id is null 來(lái)進(jìn)行過(guò)濾,最終可以得到 person 表與 CERT_CNO_PNO_TAB 表中的差集。
結(jié)果如下:
我們來(lái)驗(yàn)證一下,看看求得的這個(gè)差集,在解密表中是否真的不存在。
select * from CERT_CNO_PNO_TAB where PERSON_BUSINESS_ID = '0f551c3e03e34e449e5b2e31b64efdc5';
結(jié)果如下:
可以看出,通過(guò) left join 再加上 右表的條件過(guò)濾取的的差集,是正確的。
這種求差集的效率,遠(yuǎn)比 not in 、not exist 要快的多,小伙伴們可以嘗試一下!
MySQL查兩個(gè)表之間的數(shù)據(jù)差集
需要查兩個(gè)表之間的差集
首先,想到的是主鍵直接not in
select mailbox_id from co_user where mailbox_id not in (select mailbox_id from core_mailbox);
好吧!這個(gè)是可以,但是數(shù)據(jù)多了的話,想到這個(gè)查詢(xún)的邏輯有點(diǎn)受不住
于是再改為下面的這樣:
select cu.mailbox_id,cm.mailbox_id from co_user as cu? left join core_mailbox as cm? on cu.mailbox_id = cm.mailbox_id? where cm.mailbox_id is NULL;
利用了left join的,然后進(jìn)行對(duì)比,并且利用where進(jìn)行篩選。
后面也在網(wǎng)上找了這條:
SELECT mailbox_id FROM `co_user` left join? (select mailbox_id as i from core_mailbox) as t1 on co_user.mailbox_id= t1.i where t1.i is NULL;
概念上與第二條同理。
好吧! 回顧了一下left join
SQL LEFT JOIN 關(guān)鍵字
LEFT JOIN 關(guān)鍵字會(huì)從左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中沒(méi)有匹配的行。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
phpstudy中mysql無(wú)法啟動(dòng)(與本地安裝的mysql沖突)的解決方式
這篇文章主要給大家介紹了關(guān)于phpstudy中mysql無(wú)法啟動(dòng)(與本地安裝的mysql沖突)的解決方式,文中通過(guò)圖文將解決的方法介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09MySql優(yōu)化之InnoDB,4GB內(nèi)存,多查詢(xún)的my.ini中文配置方案詳解
本文是一個(gè)針對(duì) 4G 內(nèi)存系統(tǒng)(主要運(yùn)行只有 InnoDB 表的 MySQL 并使用幾個(gè)連接數(shù)執(zhí)行復(fù)雜的查詢(xún))的MySQL配置文件方案2018-03-03MySQL視圖的概念、創(chuàng)建、查看、刪除和修改詳解
視圖是指計(jì)算機(jī)數(shù)據(jù)庫(kù)中的視圖,是一個(gè)虛擬表,其內(nèi)容由查詢(xún)定義,下面這篇文章主要給大家介紹了關(guān)于MySQL視圖的概念、創(chuàng)建、查看、刪除和修改的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08MySQL表的增刪查改及聚合函數(shù)/group?by子句的使用方法舉例
這篇文章主要給大家介紹了關(guān)于MySQL表的增刪查改及聚合函數(shù)/group?by子句的使用方法,在MySQL中可以使用聚合函數(shù)與GROUP BY語(yǔ)句可以對(duì)數(shù)據(jù)進(jìn)行分組并進(jìn)行聚合計(jì)算,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01MySQL數(shù)據(jù)庫(kù)必備之條件查詢(xún)語(yǔ)句
當(dāng)用戶(hù)查看表格的大量數(shù)據(jù)是,由于數(shù)據(jù)量過(guò)于巨大會(huì)導(dǎo)致很難獲取到需要的數(shù)據(jù),在這時(shí),就需要一個(gè)方法,一個(gè)可以通過(guò)用戶(hù)輸入獲取到用戶(hù)需要的數(shù)據(jù)并回填入表格,這就是條件查詢(xún)的作用2021-10-10MySQL數(shù)據(jù)庫(kù)索引order?by排序精講
我們今天說(shuō)的并不是大數(shù)據(jù)下該如何優(yōu)雅的排序,如何提升排序性能的問(wèn)題,我們來(lái)仔細(xì)分析說(shuō)一說(shuō)MySQL中的排序問(wèn)題,希望可以對(duì)正在閱讀的同學(xué)們有所啟迪幫助2021-11-11