2012-11-17 3 views
2

동일한 첫 번째 영화를 공유하는 배우를 찾으려고했습니다. 모든 배우의 첫 번째 영화를 쉽게 찾을 수있었습니다.mql과 더 복잡한 조인

[{ 
    "type": "/film/actor", 
    "name": null, 
    "/film/actor/film": [{ 
     "film": [{ 
     "name":   null, 
     "initial_release_date": null 
     }], 
     "sort": "film.initial_release_date", 
     "limit": 1 
    }] 
}] 

그런 다음 두 가지 쿼리 결과의 교차 유형을 만들고 싶었습니다. 시작, 우리는 같은 영화

[{ 
    "a:starring": [{ 
    "actor": "Joe Pesci" 
    }], 
    "b:starring": [{ 
    "actor": "Robert de Niro" 
    }], 
    "name": null, 
    "id": null, 
    "starring": [{ 
    "actor": null 
    }], 
    "type": "/film/film" 
}] 

을에 참여하는 두 배우를 필요로하는 곳에 나는 freebase.com에서 쿼리 편집기에서 예를 발견하지만 "같은 내 두 개의 동일한 쿼리를 접두어 유사한 변경을하려고 할 때 a : film ","b : film "은 항상 오류가있었습니다. 아마 나는 SQL에 익숙하기 때문에 일시적인 서브 쿼리의 관점에서 생각하고 다른 방법으로 생각해야한다.

답변

1

MQL에서는 두 가지를 동일하게 제한 할 수 없으므로 MQL에서이 작업을 완전히 수행 할 수는 없지만 간단한 후 처리 단계로 모든 데이터를 필터링 할 수 있습니다.

모든 배우와 첫 번째 영화가 있으므로 그 하위 세트를 다시 사용하여 해당 영화 세트의 다른 모든 배우의 첫 번째 영화를 요청하면됩니다.

귀하의 질의는 아래와 같을 것입니다. 당신이 ID를 귀하의 비교를해야

film_id = film.film.mid 
for appearance in film.film.starring: 
    if appearance.actor.film.film.mid == film_id: 
    print "%s and %s shared the same first film %s" % (mid,appearance.actor.mid,film_id) 

주,하지 : 당신은 당신의 내면의 배우의 첫 번째 영화가 외부 배우 최초의이 같은 필름 사용 무언가과 동일한 일치를 반복하고 사람을 찾기 위해 필요 이름이 같아서 이름이 같은 다른 영화에 대해 잘못된 일치를 얻지는 않습니다 (일반적인 것은 아니지만 가능한 경우). ,

[{ 
    "type": "/film/actor", 
    "name": null, 
    "mid": null, 
    "film": { 
    "film": { 
     "name":   null, 
     "mid":   null, 
     "initial_release_date": null, 
     "starring": [{ 
     "actor": { 
      "name": null, 
      "mid": null, 
      "film": { 
      "film": { 
       "name":   null, 
       "mid":   null, 
       "initial_release_date": null 
      }, 
      "sort": "film.initial_release_date", 
      "limit": 1 
      } 
     } 
     }] 
    }, 
    "sort": "film.initial_release_date", 
    "limit": 1 
    }, 
    "limit": 2 
}]​ 
+0

감사 유망 같습니다

여기 당신이 필요로하는 정보를 생성하기 위해 MQL입니다. 내부 쿼리 initial_release_date가 outer를 참조하도록 허용하면 쿼리를 허용하는 것이 좋습니다. 중첩 수준에 관계없이 하위 쿼리가 외부 데이터 집합의 필드를 참조 할 수있는 경우 SQL 접근 방식과 동일한 방식으로 수행됩니다. – Maksee

관련 문제