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 ?attrval
s 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)