PostgreSQL中如何从非唯一行集中删除指定单条行?
删除无唯一键表中的单条指定行
你的表结构如下:
create table order_details( id_of_product integer, id_of_person text )
由于两个字段都不唯一,要删除指定id_of_product和id_of_person的单条行,不同数据库有不同实现方式,以下是常见场景的解决方案:
MySQL 实现
利用LIMIT子句限制仅删除一行:
-- 删除指定id_of_product和id_of_person的单条行 DELETE FROM order_details WHERE id_of_product = 6 AND id_of_person = '目标用户ID' LIMIT 1; -- 如果只需删除id_of_product=6的任意一行(备注中该组id_of_person相同),可简化为 DELETE FROM order_details WHERE id_of_product = 6 LIMIT 1;
Oracle/SQLite 实现
借助数据库内置的唯一行标识符(如ROWID)定位单行:
Oracle
DELETE FROM order_details WHERE ROWID = ( SELECT ROWID FROM order_details WHERE id_of_product = 6 AND id_of_person = '目标用户ID' FETCH FIRST 1 ROW ONLY );
SQLite
DELETE FROM order_details WHERE ROWID = ( SELECT ROWID FROM order_details WHERE id_of_product = 6 AND id_of_person = '目标用户ID' LIMIT 1 );
SQL Server 实现
使用TOP(1)限制删除行数:
DELETE TOP(1) FROM order_details WHERE id_of_product = 6 AND id_of_person = '目标用户ID';
注意事项
- 未指定排序条件时,数据库会随机选择一行删除;若需按特定顺序(如最早插入的行)删除,可在子查询中添加
ORDER BY(需依赖额外字段,如插入时间,若表中无此类字段则只能依赖数据库内部顺序)。 - 长期建议给表添加自增主键字段,能大幅提升数据操作的精准度与效率。
内容的提问来源于stack exchange,提问作者Raging Pacifist
相关产品推荐
相关产品推荐

