Thanks, Carlo.  Even without the documentation, I'm beginning to get the 
hang of the DSL.  I should have guessed that '(and...) would have done the 
trick.  I'd like to put a request in for using a map or a vector of pairs 
as an alternative since it's easier to construct those.

One more request:  Support for SELECT DISTINCT.  Using 0.1.0, I could get 
around the lack of DISTINCT by using GROUP BY but with the new projection 
argument, that becomes inconvenvient.

In our project, we do a ton of programmatic SQL manipulation and your 
library makes it much easier.  Thanks for contribution!


On Wednesday, November 20, 2013 7:54:19 PM UTC-8, Carlo wrote:
>
> Hi Mark! 
>
> On Wed, Nov 20, 2013 at 01:11:11PM -0800, Mark wrote: 
> > I'm using the 2.0 snapshot.  How should I express a join on multiple 
> > columns, ie 
> > SELECT blah FROM t1 JOIN t2 ON (t1.a=t2.b) AND (t1.c=t2.d) ? 
>
> Something like this should work: 
>
>     (let [t1 (-> (table :t1) 
>                  (project [:a :c])) 
>           t2 (-> (table :t2) 
>                  (project [:b :d]))] 
>       (join t1 t2 :on `(and (= :a :b) 
>                             (= :c :d)))) 
>
> If you've got shared attributes this won't work for you, though, because 
> then there's an ambiguity about whether to use a natural join (ie. 
> joining on equality of shared attributes) or your join condition (which 
> will leave an ambiguity about which shared attribute to use). In that 
> case you can use something like this: 
>
>     (let [t1 (-> (table :t1) 
>                  (project [:a :b])) 
>           t2 (-> (table :t2) 
>                  (project [:a :c]))] 
>       (join (rename t1 (as-subobject :t1)) 
>             (rename t2 (as-subobject :t2)) 
>             :on `(and (= :t1.a :t2.c) 
>                       (= :t2.a :t1.b)))) 
>
>
> Sorry about the lack of documentation for this. I'm working on it, but 
> I've been quite busy/distracted lately. Hopefully I'll have some more 
> time to get back to it soon. 
>
> Carlo 
>

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to