在语句上使用内部联接的Freebase查询

时间:2014-01-31 20:03:11

标签: sql join freebase mql

我可以在使用其他查询的免费基础上创建内部联接吗?

我尝试在2个查询之间创建连接:

首先,选择所有类型的艺术家与没有必杀技的必杀技一样:

[{
  "id": null,
  "name": null,
  "name!=": "nirvana",
  "type": "/music/artist",
  "genre": [{
    "name|=": [
      "Punk rock",
      "Grunge",
      "Alternative rock",
      "Rock music",
      "Hardcore punk"
    ]
  }]
}]

第二,选择所有类型的必杀技:

[{
  "name": "nirvana",
  "type": "/music/musical_group",
  "/music/artist/genre": []
}]

我想创建一个这样的查询,但它不起作用。

[{
  "id": null,
  "name": null,
  "name!=": "nirvana",
  "type": "/music/artist",
  "genre": [{
    "name|=":
     [{
        "name": "nirvana",
        "type": "/music/musical_group",
        "/music/artist/genre": []
     }]
  }]
}]

1 个答案:

答案 0 :(得分:1)

我不确定为什么你需要将这一切都作为一个查询来完成。由于Nirvana的音乐跨越了许多非常流行的类型,您的查询可能会返回数千个结果,这意味着您必须提出多个API请求才能获得所有结果。

在任何情况下,这里都是一个MQL查询,它可以找到所有与Nirvana至少有一个共同音乐类型的乐队:

[{
  "id": null,
  "name": null,
  "/music/artist/genre": [{
    "id": null,
    "name": null,
    "!/music/artist/genre": {
      "id": "/m/0b1zz",
      "name": null
    }
  }]
}]

第二类型属性前面的感叹号意味着我们想要反向关系即。 “有这种类型的音乐艺术家”而不是“这位艺术家的音乐流派”。

请注意,我使用MID(/ m / 0b1zz)来代表Nirvana。您不应该使用名称来标识查询中的主题,因为它们不是唯一的。你想要1987年由Kurt Cobain创立的 Nirvana的结果,而不仅仅是任何名为Nirvana的乐队。