最近和NULL遭遇了

2022-02-06 19:08:10 字數 4566 閱讀 2663

昨天經理告訴我說資料庫某一表有重複資料,讓我清除一下,寫了個sql查了一下,沒有重複的:

select

*from

bits.bits_gzt_acct_pledge t

where

exists (select

1from

bits.bits_gzt_acct_pledge s

where t.platform =

s.platform

and t.cuscode =

s.cuscode

and t.cusname =

s.cusname

and t.assuretype =

s.assuretype

and t.cqgsr =

s.cqgsr

and t.gyr =

s.gyr

and t.cqzh =

s.cqzh

and t.fcdz =

s.fcdz

and t.fcmj =

s.fcmj

and t.dbzcgz =

s.dbzcgz

and t.dbzcjz =

s.dbzcjz

and t.dyje =

s.dyje

and t.txqz =

s.txqz

and t.txqgs =

s.txqgs

and t.zcszd =

s.zcszd

and t.department =

s.department

and t.startdate =

s.startdate

and t.enddate =

s.enddate

and t.id <> s.id)

然後反饋沒有重複的資料,經理就隨便給我找來兩條重複的資料,核對一下,發現確實是重複的。但是,它們之間很多相同的字段都為空,注釋掉為空的字段,就能查到重複的資料。

原來oracle中null=null或null<>null都是false,重新修改了sql,找到了重複的資料:

select

*from

bits.bits_gzt_acct_pledge t

where

exists (select

1from

bits.bits_gzt_acct_pledge s

where nvl(t.platform, 1) = nvl(s.platform, 1

)

and nvl(t.cuscode, 1) = nvl(s.cuscode, 1

)

and nvl(t.cusname, 1) = nvl(s.cusname, 1

)

and nvl(t.assuretype, 1) = nvl(s.assuretype, 1

)

and nvl(t.cqgsr, 1) = nvl(s.cqgsr, 1

)

and nvl(t.gyr, 1) = nvl(s.gyr, 1

)

and nvl(t.cqzh, 1) = nvl(s.cqzh, 1

)

and nvl(t.fcdz, 1) = nvl(s.fcdz, 1

)

and nvl(t.fcmj, 1) = nvl(s.fcmj, 1

)

and nvl(t.dbzcgz, 1) = nvl(s.dbzcgz, 1

)

and nvl(t.dbzcjz, 1) = nvl(s.dbzcjz, 1

)

and nvl(t.dyje, 1) = nvl(s.dyje, 1

)

and nvl(t.txqz, 1) = nvl(s.txqz, 1

)

and nvl(t.txqgs, 1) = nvl(s.txqgs, 1

)

and nvl(t.zcszd, 1) = nvl(s.zcszd, 1

)

and nvl(t.department, 1) = nvl(s.department, 1

)

and nvl(t.startdate, sysdate) =

nvl(s.startdate, sysdate)

and nvl(t.enddate, sysdate) =

nvl(s.enddate, sysdate)

and t.id <> s.id)

刪除上面的重複資料後,重新檢索了一下剛才的表,發現有兩條資料一致,為什麼剛才沒有查到,一一核對,發現乙個欄位裡內容後面多了個空格,然後調整sql:

select

*from

bits.bits_gzt_acct_pledge t

where

exists

(select

1from

bits.bits_gzt_acct_pledge s

where trim(nvl(t.platform, 1)) = trim(nvl(s.platform, 1

))

and trim(nvl(t.cuscode, 1)) = trim(nvl(s.cuscode, 1

))

and trim(nvl(t.cusname, 1)) = trim(nvl(s.cusname, 1

))

and trim(nvl(t.assuretype, 1)) = trim(nvl(s.assuretype, 1

))

and trim(nvl(t.cqgsr, 1)) = trim(nvl(s.cqgsr, 1

))

and trim(nvl(t.gyr, 1)) = trim(nvl(s.gyr, 1

))

and trim(nvl(t.cqzh, 1)) = trim(nvl(s.cqzh, 1

))

and trim(nvl(t.fcdz, 1)) = trim(nvl(s.fcdz, 1

))

and trim(nvl(t.fcmj, 1)) = trim(nvl(s.fcmj, 1

))

and trim(nvl(t.dbzcgz, 1)) = trim(nvl(s.dbzcgz, 1

))

and trim(nvl(t.dbzcjz, 1)) = trim(nvl(s.dbzcjz, 1

))

and trim(nvl(t.dyje, 1)) = trim(nvl(s.dyje, 1

))

and trim(nvl(t.txqz, 1)) = trim(nvl(s.txqz, 1

))

and trim(nvl(t.txqgs, 1)) = trim(nvl(s.txqgs, 1

))

and trim(nvl(t.zcszd, 1)) = trim(nvl(s.zcszd, 1

))

and trim(nvl(t.department, 1)) = trim(nvl(s.department, 1

))

and trim(nvl(t.startdate, sysdate)) =

trim(nvl(s.startdate,sysdate ))

and trim(nvl(t.enddate,sysdate )) =

trim(nvl(s.enddate,sysdate ))

and t.id <> s. id)

終於搞定了。

今天測試功能時,又發現了乙個問題,乙個檢索條件,下拉框中只有三個選項,全部/是/否,沒想到檢索結果的總數對不上,全部135條資料,否63條資料,是0條資料。

檢查時發現,當條件選擇全部時,where後面不新增sql限制;當條件選擇否,新增sql:

and (pny.ysfx - pny.ssfx - pny.hmfx) <

=0

當條件選擇是時,新增sql:

and (pny.ysfx - pny.ssfx - pny.hmfx) >

0

從邏輯上看,沒有問題,但是仔細檢查發現,還是沒有考慮到這三個欄位為空的情況,當三個字段內容有乙個為空時,結果為null,繼續修改:

nvl(pny.ysfx,0) - nvl(pny.ssfx,0) - nvl(pny.hmfx,0)

最近太忙了

專案終於正式啟動了,忙得不可開交。近一段時間抽業餘時間也寫了不少東西,但是卻一直沒更新過部落格。感覺國內的開源環境還是有點差。以前無意中看到一本書的乙個 是乙個類似於大富翁遊戲的,名字叫回到戰國,當時在那個基礎上改了一下,增加了許多可玩因素,但是覺得還是太差了,主要那個框架有些差,很難加入ai和回合...

最近開始打桌球了

最近開始打桌球了,是開始求上進的打了。我知道自己還是個菜鳥,但是也不是那種只會打和平球的,所以既然報了名參加實驗室的比賽了,那麼就不要被人虐了就好了。而且這麼緊張的學習之餘有點業餘活動分散一下注意力實在是一件再好不過的事情,再且可以鍛鍊身體,再再且可以跟很多 人交流,再再再且可以練球技,多一門長處總...

我遭遇了高層領導的變動

我遭害了高層領導的變動,我現在的感覺我也說不清.我是從事sap管理軟體的,我的直屬領導,相當於公司的副董事長,把我從上海找到了我現在工作的地方常熟。我原來一直在軟體公司裡面從事顧問工作,因為混了多年,所以管理軟體行業實施等等還算過得去的水平。因為我的愛人和我的孩子的緣故,所以我一直希望找份穩定的工作...