【问题标题】:Yap Prolog - Translating an SQL QueryYap Prolog - 翻译 SQL 查询
【发布时间】:2018-10-14 21:34:54
【问题描述】:

我正在尝试为我从 mySql 转换为 Prolog 事实的数据库创建 Prolog 查询。

Prolog 事实涉及许多表,但与此查询相关的只有两个:

actor(ID,firstName,lastName)
film_actor(actor_id,film_id)
film(ID, title,_,_,_,_,_,_,_)

我正在尝试创建一个说明以下内容的查询:

列出恰好有 5 个演员的电影的标题。

到目前为止,我设法创建了这个查询,其中列出了所有电影以及该电影中每个演员的 ID:

all((T,AID),(film(FID,C,T,_,_,_,_,_,_),film_actor(AID,FID)),RS).

我需要计算这个 AID 并声明每个 film_id 必须等于 5 次出现 但我不知道如何从我目前阅读的 yap 文档中做到这一点。

有什么建议吗?

提前致谢

【问题讨论】:

    标签: sql prolog yap


    【解决方案1】:

    您可以只使用 findall,后跟 length 将列表限制为 5 个元素,以获得一个电影 ID。

    one_film_with_5_actors(FilmID,ActorIDs) :-
      findall(AID, (film(FilmID,_,_,_,_,_,_,_,_),film_actor(AID,FilmID)), ActorIDs),
      length(ActorIDs, 5).
    

    Prolog 将返回每对 (FilmID,ActorIDs) 的回溯, 然后将基本访问器应用到这个“分组”数据库视图,以获得您需要的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-09
      • 2021-11-26
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      相关资源
      最近更新 更多