问题描述
我有一个oracle查询,通常给我三行结果。两个是相同的,而第三个只是多余的一行。如何修改此查询以仅获得唯一结果。这是查询语句:
select prt.oid,it.itemname,it1.itemname,prt1.oid from jrtp_rdb.jrtepartoccurrence prt
join jrtp_rdb.jnameditem it on it.oid = prt.oid
join jrtp_rdb.xdistribports x on x.oidorigin = prt.oid
join jrtp_rdb.xflowports x1 on x1.oiddestination = x.oiddestination
join jrtp_rdb.xgeneratesconnectionitems x2 on x2.oidorigin= x1.oidorigin
join jrtp_rdb.xownsimplieditems x3 on x3.oiddestination = x2.oiddestination
join jrtp_rdb.jnameditem it1 on it1.oid = x3.oidorigin
join jrtp_rdb.jrtepartoccurrence prt1 on prt1.oid = it1.oid
where prt.oid in
('00013885000000004C00426DEC534269');
结果显示在下表中:
00013885000000004C00426DEC534269 Flange-120491 Gate Valve-65650 0001388500000000AB3BEAC87354D9BE
00013885000000004C00426DEC534269 Flange-120491 Gate Valve-65650 0001388500000000AB3BEAC87354D9BE
00013885000000004C00426DEC534269 Flange-120491 Flange-120491 00013885000000004C00426DEC534269
在这种情况下,我只需要第一行,因为它给出了连接到闸阀的法兰的名称。如何修改查询以仅获取唯一行并摆脱多余的第三行?
解决方法
查找重复项的最简单方法是添加唯一的行标识符,例如在实际物理表的情况下添加ROWID:
select prt.oid,it.itemname,it1.itemname,prt1.oid,count(distinct prt.rowid) prt_cnt,count(distinct it.rowid) it_cnt,count(distinct x.rowid) x_cnt,count(distinct x1.rowid) x1_cnt,count(distinct x2.rowid) x2_cnt,count(distinct x3.rowid) x3_cnt,count(distinct it1.rowid) it1_cnt,count(distinct prt1.rowid) prt1_cnt
from jrtp_rdb.jrtepartoccurrence prt
join jrtp_rdb.jnameditem it
on it.oid = prt.oid
join jrtp_rdb.xdistribports x
on x.oidorigin = prt.oid
join jrtp_rdb.xflowports x1
on x1.oiddestination = x.oiddestination
join jrtp_rdb.xgeneratesconnectionitems x2
on x2.oidorigin= x1.oidorigin
join jrtp_rdb.xownsimplieditems x3
on x3.oiddestination = x2.oiddestination
join jrtp_rdb.jnameditem it1
on it1.oid = x3.oidorigin
join jrtp_rdb.jrtepartoccurrence prt1
on prt1.oid = it1.oid
where prt.oid in
('00013885000000004C00426DEC534269')
group by prt.oid,prt1.oid;
,
如何?
select distinct prt.oid,prt1.oid from jrtp_rdb.jrtepartoccurrence prt
join jrtp_rdb.jnameditem it on it.oid = prt.oid
join jrtp_rdb.xdistribports x on x.oidorigin = prt.oid
join jrtp_rdb.xflowports x1 on x1.oiddestination = x.oiddestination
join jrtp_rdb.xgeneratesconnectionitems x2 on x2.oidorigin= x1.oidorigin
join jrtp_rdb.xownsimplieditems x3 on x3.oiddestination = x2.oiddestination
join jrtp_rdb.jnameditem it1 on it1.oid = x3.oidorigin
join jrtp_rdb.jrtepartoccurrence prt1 on prt1.oid = it1.oid
where prt.oid in
('00013885000000004C00426DEC534269') and prt.oid<>prt1.oid
,
您可以尝试这个
event: Class
altKey: (...)
bubbles: (...)
button: (...)
buttons: (...)
cancelable: (...)
clientX: (...)
clientY: (...)
ctrlKey: (...)
currentTarget: (...)
defaultPrevented: (...)
detail: (...)
dispatchConfig: null
eventPhase: (...)
getModifierState: (...)
isDefaultPrevented: (...)
isPropagationStopped: (...)
isTrusted: (...)
metaKey: (...)
movementX: (...)
movementY: (...)
nativeEvent: (...)
pageX: (...)
pageY: (...)
relatedTarget: (...)
screenX: (...)
screenY: (...)
shiftKey: (...)
target: (...)
timeStamp: (...)
type: (...)
view: (...)
_dispatchInstances: null
_dispatchListeners: null
_targetInst: null
preventDefault: (...)
stopPropagation: (...)