一塊兒來找茬(1)-開發寫的神奇左鏈接

近期在給客戶作新數據交換方案調試時發現一處視圖建立語句帶不出數據。html

精簡需求後以下:a部門從b部門獲取主體數據,因爲a、b兩部門有些代碼標準不一致須要作轉換。因而開發寫了個對照表作轉換生成業務視圖。ide

主表zb數據以下,B_MD1和B_DM2是兩種類型代碼,分別是lx1和lx2(好比一個是證件類型代碼一個地址行政區劃代碼)。主表某些字段有缺失數據的狀況。spa

爲圖省事,開發將不一樣類型的代碼對照表記錄在同一張對照表(dzb)中,以下圖調試

業務需求是建立視圖查出全部主表的數據,容許出現某些字段數據缺失的狀況。並將兩部門標準不一致的代碼作轉換。而後開發這貨寫出了以下視圖。code

CREATE VIEW V_ZB AS
  SELECT ZB.ID, ZB.NAME, LX1.A_DM DM1, LX2.A_DM DM2
    FROM ZB
    LEFT JOIN DZB LX1
      ON ZB.B_DM1 = LX1.B_DM
    LEFT JOIN DZB LX2
      ON ZB.B_DM2 = LX2.B_DM
   WHERE LX1.LX = 'lx1'
     AND LX2.LX = 'lx2';

獲得以下結果。什麼......李四去哪了?Σ( ° △ °|||)︴調試的時候是一萬多主表數據,視圖裏一條都沒能查出來。(╯°Д°)╯︵┻━┻(htm

 

/*緣由是where條件那裏篩去了未鏈接上的數據,就是left join 變成join了。where條件那裏使用對照表的lx篩選本意是想獲取不一樣類型的對照數據(如證件類型對照、地址行政區劃對照)拿來作左鏈接。但沒鏈接上的對照表類型值都是null,又怎麼經得起lx=某類型的篩選呢?
真實業務場景中因爲某個字段常常缺數,加上須要對照轉換的字段比較多,因此一條數據都出不來。
這種狀況仍是老老實實拆分紅證件類型對照表、地址行政區劃對照表這樣不一樣的對照表。或者篩選lx=類型那裏加多一個 or is null。*/
CREATE  VIEW V_ZB AS
SELECT ZB.ID,ZB.NAME,LX1.A_DM DM1,LX2.A_DM DM2  FROM ZB 
LEFT JOIN DZB LX1 ON ZB.B_DM1=LX1.B_DM
LEFT JOIN DZB LX2 ON ZB.B_DM2 = LX2.B_DM
WHERE (LX1.LX='lx1' OR LX1.LX IS NULL)
AND (LX2.LX='lx2' OR LX2.LX IS NULL);
緣由是...

 修改後,獲得以下圖的結果就合適了(๑•̀ㅂ•́)و✧blog

 

 

-------------------------------------------------------------------------------------------開發

@luqp 本文地址 http://www.javashuo.com/article/p-cvwfcibc-bq.htmlget

相關文章
相關標籤/搜索