1

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

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 行。因为孩子已经和父亲有关系了,所以我不再需要列出与母亲的关系。

例如,对于上面的示例,我需要得到以下结果:

USER_ID  RELATED_PERSON
1008     1002
1008     1005
1004     1007

实现此目的的智能查询是什么?

4

1 回答 1

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!随时通知我们。

于 2013-03-06T18:07:23.913 回答