Oracle表連線的奇怪問題

2021-09-23 21:31:29 字數 1422 閱讀 5036

今天在做計費報表的時候,由於粗心,拿資料的的指令碼給寫錯了,卻讓我發現了乙個很奇怪的問題,下面來讓我介紹我發現的這個問題:資料庫有表

charge_ref ,client_invoice ,client_invhdr。其中charge_ref表是儲存的收費型別的資料;client_invhdr表儲存的是發票頭部資訊,client_invoice表儲存的是發票的詳細資訊,大體如下圖所示

我當時拿資料的時候的指令碼大體是這樣的(這裡做了簡化處理)

select c.cdescpt, i.cntr, i.amount, i.charge_code

from client_invhdr h

left join client_invoice i on i.invoice_no = h.invoice_no

left join charge_ref c on i.charge_code = i.charge_code

where (0 = 0)

and i.status = 'c'

and h.invoice_no = 'a09000074'

紅色的部分即是我粗心寫錯的地方,結果當時發現這段指令碼執行不正確,當時也沒有發現自己的錯誤,很是鬱悶,發現它不是和

表charge_ref 左連線,而是做了自然連線。charge_ref表有42種收費型別,而client_invoice 表invoice_no 為'a09000074' 的記錄剛好為15,所以查詢出來的記錄是630。 

當時正反迷糊,以為是左連線的問題,於是改了改指令碼,結果發現和上面的指令碼執行結果一樣。如圖所示

真是納悶,仔細檢查了下**,突然發現是leftjoincharge_ref coni.charge_code = i.charge_code

這 裡連線條件的問題,很納悶為什麼在pl/sql裡表連線條件出錯的時候,也能正常執行(望高手指點一二,小弟感激不盡),而且我猜測由於這個鏈結條件沒起 作用後,它預設使用了自然連線。執行f5後發現結果如下圖,使用left join的那段指令碼執行計畫和下面的大同小異

希望各位高手多多指教!

奇怪奇怪的問題

由於需求,我自己寫了乙個mydialog extends dialog 在dialog裡面寫了乙個handler,用來更新dialog上的字。第二次更新介面,需要dialog比第一次變大點。可是dialog在activity裡面顯示,如果activity不掛後台的話,更新很正常。但是我把activi...

oracle表的連線

表連線操作有內連線和外連線兩種 1 內連線 也稱等值連線或自然連線,內連線是從結果表中刪除與其他被連線表中沒有匹配行的所有元組,所以當匹配條件不滿足時內連線可能會丟失資訊。例如 select from emp e,dept d where e.deptno d.deptno 2 外連線 外連線分為三...

oracle連線問題

問題 解決 然後,神奇的是專案的設計器打不開了。經過組長和前輩的判斷就是這個pms.module更改 為64位導致的這個問題。改回來之後就可以了。之前oracle的問題改 pms.win模組的 為64位就可以了。之後,由於使用者的機器是win7 32 位的,又出現了同樣的錯誤,64位的機器可以執行,...