DB2 SQL过滤器/组重复列,但使用“最小”id具有不同的id

时间:2013-03-06 16:52:43

标签: sql db2

如果我有一个包含以下字段的表

USER_ID  FAMILY_MEMBER_TYPE  FAMILY_MEMBER  RELATED_PERSON
1008     '01'                'fatherA'       1002
1008     '01'                'fatherA'       1005
1002     '02'                'motherA'       1005
1004     '02'                'motherB'       1007
...
1005     '03'                'childA'        
1007     '03'                'childB'

现在我需要消除重复的related_person行。 因为孩子已经与父亲有关系,所以我不再需要列出与母亲的关系。

E.g。对于上面的例子,我需要得到以下结果:

USER_ID  RELATED_PERSON
1008     1002
1008     1005
1004     1007

实现这一目标的智能查询是什么?

1 个答案:

答案 0 :(得分:0)

很好的谜语,如果在表格中每个人都相关,那么解决方案就很容易了:

SELECT t1.USER_ID, t1.RELATED_PERSON FROM table t1 HAVING t1.USERID = MIN(t1.USERID)

修改 如上述评论中所述,案例需要一些额外的假设。这是我尝试使用相关子查询(SQLFiddle):

SELECT f.USER_ID, f.RELATED_PERSON FROM family f
WHERE 
  f.USER_ID NOT IN 
  ( 
    SELECT USER_ID FROM family WHERE USER_ID > f.USER_ID AND RELATED_PERSON > f.RELATED_PERSON 
    UNION 
    SELECT RELATED_PERSON FROM family WHERE USER_ID > f.USER_ID AND RELATED_PERSON > f.RELATED_PERSON  
  )
  AND
  f.RELATED_PERSON NOT IN 
  ( 
    SELECT USER_ID FROM family WHERE USER_ID > f.USER_ID AND RELATED_PERSON > f.RELATED_PERSON 
    UNION 
    SELECT RELATED_PERSON FROM family WHERE USER_ID > f.USER_ID AND RELATED_PERSON > f.RELATED_PERSON  
  )

但是,有多个无关家庭的案件仍然存在问题。 GL!让我们发布。