SQL:需要删除查询中的重复行
我需要通过使用SQL查询或过程获得此结果的帮助。下面给出了我的示例表结构 所需结果:SQL:需要删除查询中的重复行,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,我需要通过使用SQL查询或过程获得此结果的帮助。下面给出了我的示例表结构 所需结果: docid status 24 Waiver Requested 26 Waiver Requested 27 Rejected 表A: docid ---------- 24 26 27 表b: docid Status 24 Waiver Requested 26 Rejected 26 Waiver Requested 27
docid status
24 Waiver Requested
26 Waiver Requested
27 Rejected
表A:
docid
----------
24
26
27
表b:
docid Status
24 Waiver Requested
26 Rejected
26 Waiver Requested
27 Rejected
27 Rejected
这是一篇非常好的MSDN文章“查找和/或删除重复行”
希望这会有用。除了您给出的规则之外,您不知道所有的业务规则,这里有一个更通用的解决方案 创建另一个表(或者您的数据模型已经有一个),其中包含可能的状态:
CREATE TABLE status_rank (
status VARCHAR2(100) NOT NULL,
rank NUMBER NOT NULL,
PRIMARY KEY (status_name)
);
此表用于按优先顺序排列状态。换句话说,如果在重复的情况下,选择“请求豁免”而不是“拒绝”,则使用1表示豁免,2表示拒绝
现在查询可以使用这个额外的排名表:
SELECT b.docid, r.status
FROM b,
status_rank r,
(SELECT b.id, min(r.rank)
FROM b, status_rank r
WHERE b.status = r.status
GROUP BY id) s
WHERE b.docid = s.docid
AND r.rank = s.rank
AND b.status = r.status;
有很多方法可以实际执行查询,但这应该向您展示了总体思路 为什么您期望的结果是
26,请求豁免
,而不是26,被拒绝
?你在这里使用什么标准?还有,TableB上的主键是什么?您如何知道要从TableB中选择哪一行??表B中是否有其他列可供排序??您的问题包含的上下文太少。请描述删除重复项的业务规则。您可以在表b中看到docid 26、Rejected和Requested的两个值。你用什么标准来选择一个而不是另一个?这是家庭作业吗?不一样。OP希望将业务规则应用于检测,而“重复项”并不是真正的重复项。您发布的链接用于检测所有数据相同的真实重复项。如果OP只需要执行一个没有重复结果的查询,那么选择DISTINCT就可以了。