0

如果我有两个谓词(不起作用):

addblock 'city(city_dim_id) -> int(city_dim_id).'
addblock 'city_name[city_dim_id] = name -> int(city_dim_id), string(name).'

我可以添加事实:

exec '+city(1).'
exec '+city_name[0] = "N/A".'
exec '+city_name[1] = "Chicago".'

这些是谓词中的事实查询:

query '_(city_name) <- city_name(city_name, _).'
query '_(city_name) <- city_name(_, city_name).'
query '_(city_dim_id, city_name) <- city_name(city_dim_id, city_name).'

我的问题是如何进行查询以显示 1. 两个表中的 city_dim_id 是什么,2. 返回 city_dim_id 和 city_name,但仅在两个表中都存在 city_dim_id 的地方?

提前致谢。

4

2 回答 2

0
  1. 如果通过“两个表中的 city_dim_id”,您的意思是“两个表中的 city_dim_id”,那么您想要

    _(id) <-city(id), city_name[id] = _.
    

另一方面,如果您想要任一表中的 id,则需要用析取替换连接。

_(id) <- city(id); city_name[id] = _.
  1. 我想你想要

    _(id,name) <- city(id), city_name[id] = name.
    

注意:如果您使用方括号语法city_name[id] = name,则谓词将起作用

于 2016-07-27T19:51:05.470 回答
0

抱歉,我很难理解这个问题。以下将返回具有相同 city_name 的 city_dim_id。

_(c1, c2) <-
    city(c1),
    city(c2),
    city_name[c1] = city_name[c2],
    c1 != c2.
于 2016-07-27T08:02:03.240 回答