我有一张包含超过500万条记录的表格
我需要删除300000条记录,但我不能使用表的复合键。
必须使用列Price_VERSION_SEQ
进行删除。我想在内部查询中使用fetch first 50000 rows删除块中的数据。但我不确定在主查询的Where子句中使用什么。
请帮助。应该用什么来取代****。
DELETE FROM Price_TBL where **** in
(Select * from Price_TBL where Price_VERSION_SEQ=1 fetch first 50000 rows only);
表格中的列是:
Price_GRP_VAR_COD
Price_VERSION_SEQ
Price_MP_OPER_COD
Price_FROM_MPM_RT
Price_FROM_MPM_RT1
复合键:
Price_GRP_VAR_COD
Price_VERSION_SEQ
Price_MP_OPER_COD
答案 0 :(得分:0)
您可以按顺序将****
替换为所有列。我更简单的方法就是选择密钥:
DELETE FROM Price_TBL where (Price_GRP_VAR_COD, Price_VERSION_SEQ, Price_MP_OPER_COD) in
(Select Price_GRP_VAR_COD, Price_VERSION_SEQ, Price_MP_OPER_COD from Price_TBL where Price_VERSION_SEQ=1 fetch first 50000 rows only);
答案 1 :(得分:0)
我建议使用相关列resizedImgMaxWidth
。
Price_VERSION_SEQ
答案 2 :(得分:0)
使用子选择查找50000:Price_VERSION_SEQ值。在DELETE
的{{1}}子句中使用该值。
WHERE
未经测试,不知道它是否适用于MySQL和/或SQL Server,但至少它是ANSI SQL。
如果DELETE FROM Price_TBL
where Price_VERSION_SEQ <= (Select Price_VERSION_SEQ from Price_TBL
order by Price_VERSION_SEQ
offset 50000 fetch first 1 rows only);
/ LIMIT 50000,1
语法不起作用,我认为MySQL有SELECT TOP
,而SQL Server有OFFSET
的东西。