巧妙解決數據庫關聯查詢重復數據問題
本文分析并解決了一個常見的數據庫關聯查詢重復數據問題。 用戶需要從組織表和字典表查詢數據,但由于關聯條件不完整,導致結果出現大量重復記錄。
組織表包含字段:orgid、orgchnnam、orgengnam、orgcla等;字典表包含字段:diccode、dicname、dictypecode等。 orgcla字段需與字典表dicname字段關聯。用戶最初使用的sql語句如下:
select orgid, orgchnnam, orgengnam, tdd.dicname as orgcla, toporg, uporg, manorg, cororg, orgtyp, orglev, arecod from tm_org tor, tm_dd_dicset tdd where 1 = 1 and tor.orgcla = tdd.diccode
此語句使用隱式連接,且缺乏必要的過濾條件,導致重復數據。
解決方案:利用dictypecode字段精確關聯
為了避免重復,我們需要利用字典表中的dictypecode字段,它用于區(qū)分不同類型的字典項。 通過添加tdd.dictypecode=’orgcla’條件,僅篩選與orgcla相關的字典項。
改進后的sql語句如下:
SELECT orgId, orgChnNam, orgEngNam, tdd.DicName AS orgCla, topOrg, upOrg, manOrg, corOrg, orgTyp, orgLev, areCod FROM tm_org tor LEFT JOIN tm_dd_dicset tdd ON tor.orgCla=tdd.DicCode AND tdd.DicTypeCode='orgcla' WHERE 1=1
我們使用了LEFT JOIN,確保即使組織表中某些記錄在字典表中沒有匹配項,也能被包含在結果中。 AND tdd.DicTypeCode=’orgcla’條件確保只連接與orgcla相關的記錄,從而有效避免重復。 如需限制結果數量,可在語句末尾添加LIMIT 3。 此方法清晰地表達了連接條件,并精準地解決了重復數據問題。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END