轉向這邊呂布又為了袁術而派高順攻打劉備,曹操派夏侯惇去援救劉備,沒有取勝。劉備也被高順打敗了。

九月,曹操親自東征呂布。

冬季十月,曹操屠戮彭城,擒獲了彭城國相國侯諧。曹操進軍到了下邳,呂布親自率領騎兵迎擊,曹操大敗呂布,俘獲了他的猛將成廉。一直追到下邳城下,呂布害怕了,想要投降。陳宮等人勸阻了他,一邊向袁術求援,一邊勸呂布出戰,呂布出戰再次失利後就回來堅守。

曹操久攻不下。當時曹操連續作戰,士兵疲憊不堪,想要回去時曹操便採納了荀攸、郭嘉的計策,挖開泗水、沂水的堤壩,來淹灌下邳城。

一個多月以後,呂布的部將宋憲、魏續等人抓住了陳宮,獻出城池投降,曹操活捉了呂布、陳宮,把他們全都殺了。泰山人減霸、孫觀、吳敦、尹禮、昌豨等人各自聚集部眾。呂布打敗劉備時,減霸等人全跟隨了呂布。呂布失敗後,曹操抓住了臧霸等人,給他們優厚的待遇,把青、徐二州沿海的土地分割出來委任他們管理。從琅邪、東海、北海三郡中分出了城陽、利城、昌慮三郡。

當初曹操做兗州刺史,任命東平人畢諶為別駕。張邈叛變時,劫走了畢諶的母親、弟弟、妻子、兒女。曹操向他道歉,讓他離去,說:“您的老母親在張邈那裡,可以去他那邊。”畢諶叩頭表示沒有二心,曹公誇獎他,併為他流下了眼淚。

畢諶出去後,就逃到張邈那裡。在呂布被打敗後,畢諶也被活捉了,大家都為畢諶擔心。曹操說:“那種能夠孝敬父母的人,難道會不忠於他的君主嗎?這正是我要尋找的人。”於是曹操不僅沒殺畢諶還讓其做了魯國的相國。

建安四年春季二月,曹操回到昌邑。張楊的部將楊醜殺死了張楊,眭固又殺死了楊醜,帶著部眾歸順袁紹了,駐紮在射犬。夏季四月,曹操進軍來到黃河邊,派遣史渙、曹仁渡過黃河去攻打眭固。眭固讓原來擔任張楊長史的薛洪、河內太守繆尚留守,自已率領軍隊向北去迎接袁紹求救。眭固和史渙、曹仁在犬城相遇,雙方交戰,大敗敵軍,將眭固斬首。

於是曹操渡過黃河,包圍了射犬。薛洪、繆尚率領部下投降被封為列侯,曹操領兵回到敖倉任命魏種為河內太守,把黃河以北的事務委託給他。

當初,曹操舉薦魏種為孝廉。兗州叛變時,曹操說:“只有魏種不會背棄我。”等到 曹操聽說魏種也逃走了,憤怒地說:“魏種只要不向南逃到越人那裡,不向北逃到胡人那裡,我就不會放過他。”

等到攻下射犬,活捉了魏種,曹操說:“只因為他有才能啊!”於是解開了捆綁他的繩子,又任用了他。

這時袁紹已經吞併了公孫瓚的地盤,一共佔有四個州的土地,有十幾萬軍隊,準備進軍攻打許縣。眾將都認為無法抵禦,曹操說:“我瞭解袁紹的為人。他志向遠大卻智慧不足,外表嚴厲卻膽識淺薄,多疑刻薄卻缺少威望,士兵眾多卻部署不得當,將領驕橫卻政令不統一,他的地盤雖然廣闊,糧食雖然充足,卻正好拿來奉送給我。”

秋季八月,曹操進軍到黎陽,派臧霸等人進入青州,攻克齊、北海東安三郡,留下於禁在黃河邊上駐守。

九月,曹操回到許縣,並分派一支部隊駐守官渡。冬季十一月,張繡率領部眾投降,被封為列侯。十二月,曹操在官渡駐紮。

袁術自從在陳郡被打敗後,逐漸陷入困境,袁譚從青州派人去迎接他。袁術打算從下邳北部經過,曹操派劉備、朱靈去截擊。正巧袁術病死。

程昱、郭嘉聽說曹操派劉備出兵,對他說:“不能放劉備出去。”曹操仔細一想後悔了,派人去追劉備,已經來不及了。劉備沒有往東去的時候,暗地裡與董承等人謀劃造反,到了下邳,劉備就殺死徐州刺史車胄,統領軍隊,駐在沛縣。曹操派劉岱,王忠去攻打他,沒有取勝。廬江太守劉勳率領部下投降,被封為烈侯。

建安五年春季正月,董承等人的陰謀敗露,全部被處死。曹操準備親自東征劉備,眾將都說:“與您爭奪天下的人是袁紹,現在袁紹正領兵來,您卻不管他而向東進攻。如果袁紹乘機在後面攻擊我們,該怎麼辦?”曹操說:“劉備是人中豪傑,現在不去打敗他,將來一定會成為後患。袁紹雖然有遠大的志向,但是遇事遲疑,一定不會行動的。”郭嘉也支援曹操,於是向東攻打劉備,大敗敵軍,活捉了他的部將夏侯博。劉備逃走,投奔了袁紹,曹操捉住了劉備的妻子兒女。劉備的部將關羽駐守在下邳, 曹操再去進攻,關羽投降了。昌豨叛變,投奔劉備,曹操又打敗了他。曹操回到官渡,而袁紹果真如預想那般始終沒有出兵。