假设我想要一份热门电影列表中从未由 Tim Burton 执导的演员列表。
我尝试通过以下步骤来做到这一点:
- 选择蒂姆·伯顿导演的所有演员(子选择)
- 从热门电影列表中选择演员列表(通过 imdb ids)
- 在第二个选择中从第一个选择中排除所有演员 (
NOT IN
)
这是我尝试的不起作用的代码(NOT IN
失败,我不知道为什么):
SELECT DISTINCT ?actor ?actorLabel
WHERE {
?film wdt:P31 wd:Q11424
;wdt:P161 ?actor
;wdt:P345 ?imdbId .
{
SELECT ?excludeActors
WHERE {
?film wdt:P31 wd:Q11424
; wdt:P57 wd:Q56008
; wdt:P161 ?excludeActors .
}
} .
FILTER(?actor NOT IN (?excludeActors)) .
FILTER(?imdbId = "tt1077368" || ?imdbId = "tt0167260") .
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr" }
}
或点击此链接
(Christopher Lee 上有一个过滤器,您可以删除 [最后一个],它用于突出我在这里解释的内容:)
在这段代码中,我有两部电影:Dark Shadows(由 Tim Burton 导演)和 The Lord of the Rings 3。在这个例子中,Christopher Lee 出现在两部电影中,这意味着他应该被排除在外,因为 Tim Burton 导演了他在 Dark Shadows 中。您可以在列表中看到他。
我真的不明白为什么NOT IN
子选择失败。我尝试了 sub Select 请求,我在里面找到了 Christopher Lee,这意味着他应该被排除在外。