2016-07-26 12 views
0

Wenn ich zwei Prädikate (nicht funktionsfähig):Querying von Keys mit LogicBlox

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

kann ich hinzufügen, Fakten:

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

Diese werden dann Abfragen von Fakten in den Prädikaten:

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).' 

Meine Frage ist, wie mache ich eine Abfrage zu zeigen 1. Was sind die city_dim_id in beiden Tabellen, 2. Rückgabe city_dim_id und city_name, aber nur wo city_dim_id in beiden Tabellen vorhanden ist?

Vielen Dank im Voraus.

Antwort

0

Tut mir leid, ich habe Mühe, die Frage zu verstehen. Folgendes gibt die city_dim_ids zurück, die denselben city_name haben.

_(c1, c2) <- 
    city(c1), 
    city(c2), 
    city_name[c1] = city_name[c2], 
    c1 != c2. 
0
  1. Wenn von 'city_dim_id in beiden Tabellen' du meinst 'city_dim_id die in beiden Tabellen sind' dann wollen Sie

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

, wenn auf der anderen Seite Sie die ID wollen Wer in einer der beiden Tabellen ist, muss die Konjunktion durch eine Disjunktion ersetzen.

_(id) <- city(id); city_name[id] = _. 
  1. Ich glaube, Sie wollen

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

Anmerkung: Wenn Sie die eckige Klammer Syntax verwenden city_name[id] = name dann das Prädikat funktional sein