使用SQL查询

时间:2015-09-03 06:22:41

标签: mysql sql sql-server sql-delete

我有一张包含超过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 

3 个答案:

答案 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的东西。