隋炀帝死后,东都洛阳还在隋朝的东都留守杨侗(炀帝的孙子)和大臣王世充手里。王世充把杨侗立为皇帝,继续打着隋朝的旗号,对抗起义军。后来王世充看准瓦岗寨李密的弱点,发起一次袭击,打垮了李密大军。王世充赶跑了李密,自以为力量强大,就把杨侗废了,自立为帝,国号叫郑。这时候,唐军已经削平了西北的几个豪强割据势力,稳定了后方。公元620年,唐高祖派李世民统率大军进攻东都。李世民大军一出关,河南许多州县纷纷投降,很快就把东都包围起来。唐军对东都越围越紧,日夜不停地攻城。李世民向将士发出命令说:“不攻下东都,决不退兵。”王世充被逼得走投无路,只好派人偷偷地出城,赶到河北向夏王窦建德求救。窦建德大军到了武牢关,李世民上高地观察了夏军的阵势,说:“窦建德没有遇到过强大的敌手,从他的阵势,可以看出他骄傲轻敌。我们只要按兵不动,等待他们兵士疲劳的时候,一举出击,一定能打败他们。”一日,窦建德正和他的将帅在大营聚会,听到唐军骑兵突然冲来,赶忙指挥骑兵应战。双方发生了激战,阵地上尘土飞扬,箭如雨落。窦建德失败后,李世民再回兵围攻东都。王世充还想突围,将士们说:“现在夏王已经失败,我们就是突围出去,也没有用。”王世充眼看大势已去,只好向唐军投降。