雖然從前王世充與竇建德雙方曾為爭奪河內等一部分地盤發生過衝突,但建德的中書侍郎劉彬認為,應把握戰機暫棄前嫌出兵應援。
他分析說:天下大亂,唐得關西,鄭得河南,趙得河北,共成鼎足之勢。今唐舉兵臨鄭,自秋涉冬。唐兵日增,鄭地日蹙,唐強鄭弱,勢必不支。鄭亡,則趙不能獨立矣,不如解仇除怨,發兵救之。趙擊其外,鄭攻其內,破唐必矣。唐師既退,徐觀其變,若鄭可取之,並二國之兵,乘唐師之老,天下可取也。
劉彬對形勢的分析可謂切中要害、一箭雙雕,而且切實可行。當時唐軍勢盛,單獨由趙國或鄭國都不足以與唐軍對抗,隻有維持三足鼎立,才可能生存,竇建德采納了他的建議。
就在夏曆五十六年三月,竇建德令範願守曹州,單雄信等諸位大將率眾西救洛陽,水陸並進以船隊運糧,駐軍於成皋東邊的東原。
這時唐軍圍攻洛陽,哪怕有火藥武器的幫助也因為洛陽城牆厚達五丈,李唐製造的低劣火藥根本無法將其炸塌,洛陽城的久攻不下讓李唐將士多疲憊欲歸,李淵亦有休兵之意,但李世民卻不同意。
此時麵對竇建德的前來,多數人認為‘吾兵疲老,世充憑守堅城,未易猝拔,建德席地而來,鋒銳氣盛。吾腹背受敵,非完策也’主張退兵新安,以承其弊。
但是大將郭孝恪反對撤兵,他認為‘世充窮蹙,垂將麵傅,建德遠來助之,此天意欲兩亡之也。宜據武牢之險以拒之,伺間而動,破之必矣!’
薛收也讚同此意見,並進一步補充了郭孝恪的意見,如今李唐政權麵對的不僅僅是竇建德和王世充,更要在接下來麵對最強大的夏國,隻有盡快統一天才能在日後與夏國的戰爭中保持一定的抵抗力。
李世民很讚同郭孝恪和薛收的分析和建議,針對蕭瑀等大將的反對意見,明確決斷與竇建德大軍繼續作戰。
於是他中分麾下,令齊王李元吉圍守洛陽,他親率精兵三千五百人東進虎牢。
到虎牢後,世民帶人偵察竇建德軍情,沿途將五百騎分別埋伏道旁,僅帶尉遲敬德等四名勇將跟隨。
在距竇建德軍營三裏處時幾人卻被對方發現,竇建德大將派出五千餘騎兵追擊,李世民等人迅速撤退把他們引入伏擊圈內,周圍唐軍齊出大敗敵軍,斬首三百餘級,這就極大的鞏固了唐軍的士氣。
建德率兵西來,被唐軍阻擊於虎牢關近月餘,幾次交戰又都失利,將士接連受到挫折之下開始思歸,唐軍又派輕兵攔截了他的軍糧,不斷襲擾竇建德的後方糧道。
麵對這種形勢,他召集將士討論用兵之策,淩敬勸說竇建德大王先攻取大河以北的懷州、河陽,派遣大將駐守,然後翻越太行山脈攻入上黨,迅速奪取李唐在河東汾河故地的汾、晉等地,然後再奪取蒲津威脅關中之地。
淩敬的計謀也是很好,不過王世充連連派人向建德求救哀求催促他發兵,竇建德麾下諸將也覺得自己的兵力遠遠超過唐軍,心中有了輕敵的心思都主張與唐軍決戰。
雖然建德夫人曹氏也勸他要聽從淩敬的建議,但建德不予理會,依然決定率大軍與唐作正麵交鋒。
經過一番偵察後竇建德計劃在唐軍馬料用盡,放馬於河北之際襲擊虎牢關。
這一消息卻為李世民所知,五月李世民北渡河,南臨廣武,故意放馬於河邊以引誘對方,然後他自己卻在當夜緊急趕回虎牢關。
第二天,中計的竇建德果然率全軍來攻打虎牢關,李世民堅壁不出,竇建德布好戰陣等了兩個時辰,士卒饑疲之下都坐下來休息,因為天氣炎熱又爭著去喝水漫無紀律。
就在這時李世民乘竇建德軍散亂之機率眾出戰,直撲其陣。
而竇建德這時正在接見群臣,唐騎兵突然殺到,大臣們都向竇建德奔去,竇建德命騎兵應戰,並命擋路的大臣們退開,就在這進退之間,唐軍已經殺到了眼前,竇建德隻得退到東邊的山坡。
此時,兩軍惡戰,李世民親自率幾員大將卷著唐軍戰旗突進到竇建德軍陣的後麵,然後打開旗幟。
正在激烈交戰的竇建德軍以為自己後方軍陣已潰,於是全軍大敗,竇建德也在戰亂中被擒。