我的一个朋友在测试中发现了这一点,我对此感到困惑。不使用游标,也不区分,既不子选择,可以删除看起来像这样的表中的第二个代码“2” ?(最好用一个语句)
code | Name
--------------
1 | Name1
2 | Name2
3 | Name3
1 | Name1
1 | Name1
2 | Name2 <----delete this field
3 | Name3
查看结果集,您可能会指着某物说“第二行”,但从技术上讲,没有这样的“保证”第二行。您需要能够按特定顺序(通常按要求)对结果集进行排序,然后确定第二行。
所以,像这样的问题,反而会有一个明确的答案。
当数据按名称升序排序时,从表中删除第二个“代码 2” 。(即使在这种情况下,当有多个代码为 2 且名称相同的行时该怎么办也存在问题)
--标识要删除的行。
select rowid from (
select rowid,
rank () over (order by name asc) rnk --or dense_rank
--depending on requirement
from test_table
where code = 2
)where rnk = 2
--删除行,使用选定的rowid。
delete from test_table
where rowid in (
<query above..>
};