So I can use
[?entity1 ?attrname1 ?attrval]
[?entity2 ?attrname2 ?attrval]
in a :where clause to get ?entity1 and ?entity2 where there exists an ?attrval that matches
I'm using
[(q '[:find (seq ?attrval)
:in $ ?entity ?attrname
:where [?entity ?attrname ?attrval]]
db ?entity1 ?attrname1) [[?attrvals1]]]
[(q '[:find (seq ?attrval)
:in $ ?entity ?attrname
:where [?entity ?attrname ?attrval]]
db ?entity2 ?attrname2) [[?attrvals2]]]
(not-join [?attrvals1 ?attrvals2]
[(seq ?attrvals1) [?element ...]]
(not [(contains? ?attrvals2 ?element)]))
to get ?entity1 and ?entity2 where all ?attrvals for ?entity1 exist for ?entity2. Is there a more performant way to do this??
(This feels like a directional "and" to the implicit "or" being applied to each attrval matching in the first case)