【问题标题】:I am looking find dups我正在寻找 dups
【发布时间】:2020-05-30 13:36:58
【问题描述】:

我正在尝试过滤掉在 Oracle TOAD SQL 中编写查询的重复数据。以下是我的数据:

Primary          T_ID           C_ID
2039515494      276162453       20028
2176514662      276721971       5508
2176514662      276721972       5508

我希望只有

 Primary          T_ID          C_ID
2176514662      276721971       5508
2176514662      276721972       5508

【问题讨论】:

  • 考虑两行“重复”的规则是什么?我无法从示例中清楚地得到它。

标签: sql oracle select duplicates


【解决方案1】:

使用count 的窗口(分析)变体可以帮助您:

SELECT primary, t_id, c_id
FROM   (SELECT primary, t_id, c_id, COUNT(*) OVER (PARTITION BY primary, c_id) AS cnt
        FROM   mytable) t
WHERE  cnt > 1

【讨论】:

  • 我认为您不希望在分区子句中使用t_id。请注意,示例输出有两个不同的值t_id。 (提问者没有明确说明他们想要考虑哪些字段来定义重复。)
  • @DaveCosta true 'dat。我误读了给定结果中的数据。
  • @DaveCosta 和 mureinik,谢谢你们的帮助,我确实删除了 t_id,因为我需要将其作为最终答案。
【解决方案2】:

你可以用一个简单的exists,我想:

select t.*
from t
where exists (select 1 from t t2 where t2.primary = t.primary and t2.t_id <> t.t_id);

这假设t_id 是唯一的。您可能还希望包含c_id 以进行比较。

【讨论】:

    【解决方案3】:

    这假设您正在寻找具有重复“主”值的行;

    select * from t where primary in 
    (select primary from t group by(primary) having count(primary) > 1);
    

    这假设您要同时考虑 primary 和 c_id

    with t1 as (select primary, c_id from t group by(primary, c_id) having count(*) > 1) 
    select t.primary, t.t_id, t.c_id from t, t1 where t.c_id = t1.c_id and t.primary = t1.primary;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 2016-11-04
      • 2012-02-15
      相关资源
      最近更新 更多