Oracle11g 如何从sql中具有重复值的属性表中删除所有记录?

Oracle11g 如何从sql中具有重复值的属性表中删除所有记录?,oracle11g,oracle10g,Oracle11g,Oracle10g,我有一个人行道和汽车防撞台。关于执行内部连接ie select * from ped inner join vehicle on ped.CRSH_NUM = vehicle.CRSH_NUM ; 我在联接结果中得到重复的值 CRSH_NUM CAL_YR PER_SQ xyz xyz xyz xyz xyz xyz ------------------------------------------------------------------- 124035

我有一个人行道和汽车防撞台。关于执行内部连接ie

select * 
from ped 
inner join vehicle on ped.CRSH_NUM = vehicle.CRSH_NUM ;
我在联接结果中得到重复的值

CRSH_NUM    CAL_YR PER_SQ   xyz  xyz       xyz  xyz xyz xyz
-------------------------------------------------------------------
124035430   2015       2    FL  32148       086 2   4   1
127226060   2015       1    FL  33755       054 1   3   3
704850370   2015       2    FL  33406       024 2   1   7
704850370   2015       2    FL  33406       024 2   1   7
708287950   2015       3    FL  32724       059 1   1   7
708287950   2015       2    FL  32724       060 1   1   7
734803610   2015       2    FL  32724       043 1   2   3
--------------------------------------------------------------------
我想要的结果是:

CRSH_NUM    CAL_YR PER_SQ   xyz  xyz       xyz  xyz xyz xyz
-------------------------------------------------------------------
124035430   2015       2    FL  32148       086 2   4   1
127226060   2015       1    FL  33755       054 1   3   3
734803610   2015       2    FL  32724       043 1   2   3
--------------------------------------------------------------------
另外,我删除了其他属性,因为它们不适合这里。我的意思是,我将运行的查询需要选择所有列

选择*而不是选择CRSH_NUM、CAL_YR、PER_SQ、xyz。。。。。从tablename开始


我使用的是sql developer和oracle 12c server。

如果您希望所有记录都与重复的崩溃数值无关,可以使用group by、having和not in

  select * 
  from ped 
  inner join vehicle on ped.CRSH_NUM = vehicle.CRSH_NUM 
  where crsh_num not in (
        select CRSH_NUM    
        from ped 
        inner join vehicle on ped.CRSH_NUM = vehicle.CRSH_NUM 
        group by CRSH_NUM
        having count(*)>1;
  )

在注释之后,可以只为每个cras_num分配一个从1开始递增的行号,然后只显示1的行?顺序依据决定显示哪些记录和值,因为它们不同

WITH CTE AS (SELECT *, row_number() over (partition by CRSH_NUM order by Cal_year Desc Per_SEQ Desc) RN
             FROM ped 
             INNER join vehicle 
                on ped.CRSH_NUM = vehicle.CRSH_NUM

Select * from cte where RN = 1

您实际使用的数据库是MySQL还是SQL Server?MySQL还是SQL Server?请正确标记。这些不是重复的。这些记录的存在是因为其他数据是相关的和唯一的,前提是您加入PK/FK关系704850370是重复的,因为ped或车辆列表碰撞次数多次。列标题xyz xyz,xyz除了说明结果中标记为xyz的第6列显示值不重复之外,对隔离问题没有帮助。虽然第一条和第二条记录看起来是相同的,但您可以删除数据,使其唯一,为什么704850370不在您的预期结果中?708287950也不是?你确定要加入PK/FK关系吗?@xQbert我唯一的请求是从列CRSH_NUM中删除重复/重复的值。若你们想看更大的画面,每一次涉及一辆以上车辆的行人碰撞都有几行,每行代表一辆车。所以,我想消除所有涉及1名行人和多辆车或1辆车和多辆车的碰撞。