我有SQL
声明,
select * from table1 where member_id='$member_id' order by date_time_modified desc;
返回 48 行,但我只想使用第一个 20 结果。
如何使用单个DELETE
语句保留前20行并删除第20行(21到48)之后的所有行。
答案 0 :(得分:0)
如果您需要根据列表进行删除,可以使用IN
:
delete from your_table
where id in (value1, value2, ...);
如果您需要根据查询结果进行删除,还可以使用IN
:
delete from your_table
where id in (select aColumn from ...);
(请注意,子查询必须只返回一列)
如果您需要根据一系列值进行删除,请使用BETWEEN
或使用不等式:
delete from your_table
where id between bottom_value and top_value;
或
delete from your_table
where id >= a_value and id <= another_value;
另外,请记住根据您的要求添加到语句ORDER BY
,LIMIT
和ASC
或DESC
。
您可以四处游戏并测试您想要使用的语句:
答案 1 :(得分:0)
您可以在删除查询中使用LIMIT
,只需更改排序顺序即可删除最后一行而不是第一行
DELETE
FROM table1
WHERE member_id='$member_id'
ORDER BY date_time_modified ASC
LIMIT 28
;
答案 2 :(得分:0)
由于您按日期时间降序排序,我想您想保留最新的20行?如果它是一次性删除顺序,则按升序排列,以便首先给出较旧的行,然后将其限制为(48-20)行以删除:
DELETE FROM table1 WHERE member_id='$member_id' ORDER BY date_time_modified ASC LIMIT 28