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 に答える