李世民说:“现在四周各州都已经投降,洛阳成了一座孤城,迟早可以攻下,怎么能半途停下来。”接着就向将士发出命令说:“不攻下东都,决不退兵。”
王世充被逼得走投无路,只好派人偷偷地出城,赶到河北向窦建德求救。
窦建德领导的起义军是河北一支强大的力量。王世充自称郑帝以后,窦建德也自称皇帝,国号叫夏,攻占了唐军许多土地。他接到王世充的求救信,一面带领三十万人马,水陆并进,援救东都;一面派出使者给李世民送去一封信,要李世民退回关中。
唐军许多将军都被夏军的强大兵力吓得害怕了,主张暂时离开东都。但是有人认为王世充兵力还很强,缺少的是粮食。如果让窦建德跟王世充两军会合,用河北的粮食接济东都,那末胜利就没有希望了。
所以,一定要把南下的窦建德大军堵住。
李世民接受了这个意见,把李元吉留在东都继续围攻王世充,自己带三千多精兵北上,扼守武牢关(就是虎牢关。在今河南荥阳汜水镇)。
窦建德大军到了武牢关,被唐兵拦住,夏军发起几次进攻都没成功,李世民却派轻骑兵抄小路,把夏军的粮道切断了。
窦建德认为自己兵力强大,不怕攻不下武牢关。他拒绝了他部下和妻子的劝阻,命令全军出动,摆开阵势,鼓噪着冲了过来。
李世民上高地观察了夏军的阵势,说:“窦建德没有遇到过强大的敌手,从他的阵势,就可以看出他骄傲轻敌。我们只要按兵不动,等待他们兵士疲劳的时候,一举出击,一定能打败他们。”
夏军兵士摆开阵势,准备交锋。但是,从早上到中午,还没有见唐军出来交战,兵士们又疲劳,又饥饿,有的坐在地上,有的到河滩上舀水喝。李世民一见时机已到,就命令将士渡过汜水,直冲窦建德大营。
窦建德正和他的将帅在大营聚会,听到唐军骑兵突然冲来,赶忙指挥骑兵应战。双方发生了激战,阵地上尘土飞扬,箭如雨落。
李世民乘夏军不防备,带领一支队伍猛插到夏军阵后,举起了唐军的大旗。夏军将士回头一看,以为唐军已经占领大营,没有心思再战,争先恐后地逃散。窦建德在混战中受了伤,被唐军俘虏了。
窦建德失败后,李世民再回兵围攻东都。王世充还想突围,将士们说:“现在夏王已经失败,我们就是突围出去,也没有用。”王世充眼看大势已去,只好向唐军投降。
窦建德被送到长安,不久就被杀害,他的部将刘黑闼(音tà)率领河北夏军,继续和唐军作战。唐军又花了三年时间,才把河北地区稳定下来。公元623年,唐统一中国的战争基本结束。但是,唐朝皇室内部的矛盾却尖锐起来。