程序員熬夜寫代碼為什么效率低?看我因為一個簡單的問題撓破頭!硬是花了我快一個小時,最后突然反應(yīng)過來,想死的心都有了!后來我安慰自己:這不能怪我,因為熬夜寫代碼真的容易走神!
事情很簡單,我需要做一個Excel導(dǎo)出數(shù)據(jù)的功能,根據(jù)時間先把數(shù)據(jù)查詢出來,然后寫入Excel中進行保存,功能很簡單吧?
這就涉及到了Sql語句了,現(xiàn)在有兩張表,本來這兩張表的數(shù)據(jù)是獨立的,但是,做Excel導(dǎo)出時,需要將這兩張表中的部分數(shù)據(jù)進行合并,所以,就涉及到了聯(lián)查功能。
最開始,我以為問題很簡單,因為兩張表中都有字段“xxxNo”和“xxxId”,而在系統(tǒng)的業(yè)務(wù)邏輯中,這兩個字段合并起來應(yīng)該是全局唯一的,但是,偶爾會出現(xiàn)不是唯一的情況,因此,這兩個字段并沒有被設(shè)計成唯一索引。
我希望Sql語句達到的效果應(yīng)該是A表為主表,B表為從表,A表Left Join B表,想要達到的目的就是,A表不管有多少數(shù)據(jù)先查出來,然后再根據(jù)A表已有的數(shù)據(jù)去聯(lián)查B表。
但是,我查詢出來的數(shù)據(jù)條數(shù)始終不對,假設(shè)A表的數(shù)據(jù)量有100條,我希望不管B表有多少數(shù)據(jù),聯(lián)表查詢后的數(shù)據(jù)總條數(shù)就應(yīng)該是100條,但是,我查出來的數(shù)據(jù)始終是大于100條。
因為“xxxNo”和“xxxId”這兩個字段在B表內(nèi)并非唯一,所以查詢就有問題了。
然后,我對B表進行了重新改造,直接在B表中新增了一個字段“AId”,即A表數(shù)據(jù)行的Id。
按照我的認知,這樣一來,不管怎么樣,這個“AId”在B表內(nèi)肯定是唯一的,因為只有A表在新增數(shù)據(jù)時,B表會跟著新增數(shù)據(jù),并且因為A表的Id是自增的,怎么搞也不會重復(fù)吧!
然后,詭異的事情就出現(xiàn)了,我將代碼改好以后,新增了一條數(shù)據(jù),選擇了數(shù)據(jù)導(dǎo)出,結(jié)果只出現(xiàn)了一條數(shù)據(jù)!可是,A表明明有101條數(shù)據(jù)啊,怎么在B表中新增字段以后查出來的數(shù)據(jù)只有1條了呢?
我開始懷疑起了我對數(shù)據(jù)庫的認知,難道Left Join B表后,按照A表的Id進行匹配,只會聯(lián)合查詢出A表Id和B表“AId”匹配的數(shù)據(jù)?
為了驗證我的想法,我又新增了一條數(shù)據(jù),A表數(shù)據(jù)來到了102行,然后我再點擊數(shù)據(jù)導(dǎo)出,結(jié)果數(shù)據(jù)真的只有2行!
此時,我有點崩潰了!難道我一直以來對數(shù)據(jù)庫查詢的認知有問題?
你們絕對想不到我犯了什么樣的錯誤!并且,你們也絕對想不到我是怎么發(fā)現(xiàn)這個錯誤的!其實,錯誤非常簡單!
因為,在“錯誤”出現(xiàn)的時候,已經(jīng)過了凌晨0點!
我一直以來都是根據(jù)時間查詢的,即當天的0點到當天的23點59分59秒這個時間段查詢的數(shù)據(jù),根據(jù)這個條件,查詢出來的數(shù)據(jù)是100行!
并且,我的軟件第一次進入查詢界面,代碼就會自動將時間控件置為當天的0點到當天的23點59分59秒。
因為每次改完代碼,我都需要重啟軟件,因此,時間控件的值就會被自動重置,在我改完代碼后,時間就被重置了。
所以,我即使新增了一條字段,A表此時能查詢出來的數(shù)據(jù)條數(shù)也就只有一條!
而我是怎么發(fā)現(xiàn)這個問題的呢?
因為我改完代碼以后,數(shù)據(jù)條數(shù)始終不對,我就進了數(shù)據(jù)庫去查詢數(shù)據(jù)來驗證我的Sql語句到底有沒有寫錯,但是,在我的意識里,是還沒過0點的,所以,我的查詢條件依然寫得是前一天的0點到23點59分59秒這個時間段。
結(jié)果,查出來的數(shù)據(jù)依然是100條!
剛開始我還納悶,此時數(shù)據(jù)明明是102條啊,怎么查詢出來的數(shù)據(jù)只有100條呢?
直到現(xiàn)在,我都沒有懷疑時間是否已經(jīng)過了0點這件事情!直到我撓破頭都想不到我錯在哪里的時候,我下意識地拿起手機想要放松一會兒,結(jié)果發(fā)現(xiàn)我的手機是黑屏的!
此時我恍然大悟,因為我的手機過了凌晨0點會自動熄屏的!
結(jié)語
得知真相的我,真的被自己蠢哭了,直到我解決問題的時候,都已經(jīng)快凌晨1點了!我竟然在這個問題上折騰了那么久!
不過,這也提醒我,此時應(yīng)該關(guān)閉電腦,好好休息了!否則,下一步又不知道犯什么蠢事了!
很多程序員都說加班或者熬夜寫代碼效率低,可能非程序員沒有什么概念,經(jīng)過我的事情,你們現(xiàn)在應(yīng)該知道為什么加班或者熬夜寫代碼效率低了吧?因為當連續(xù)工作時間太長的話,腦子是真不好使了!
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.