如果我有一个包含以下字段的表
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
实现这一目标的智能查询是什么?
答案 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!让我们发布。