在SQL和Sequel中需要帮助,包括内连接和where/filter

mhd*_*mhd 4 ruby sql sequel

需要帮助将sql转移到续集:
SQL:

SELECT table_t.curr_id FROM table_t
INNER JOIN table_c ON table_c.curr_id = table_t.curr_id 
INNER JOIN table_b ON table_b.bic = table_t.bic
WHERE table_c.alpha_id = 'XXX' AND table_b.name='Foo';
Run Code Online (Sandbox Code Playgroud)

我陷入了续集,我不知道如何过滤,到目前为止这样:

 cid= table_t.select(:curr_id).
                    join(:table_c, :curr_id=>:curr_id).
                    join(:table_b, :bic=>:bic).
                    filter( ????? )  
Run Code Online (Sandbox Code Playgroud)

比以上更好的习语答案也很受欢迎.Tnx.

更新:
我必须修改一点才能使它工作

cid = DB[:table_t].select(:table_t__curr_id).
  join(:table_c, :curr_id=>:curr_id).
  join(:table_b, :bic=>:table_t__bic). #add table_t or else ERROR: column table_c.bic does not exist
  filter(:table_c__alpha_id => 'XXX',
         :table_b__name => 'Foo')
Run Code Online (Sandbox Code Playgroud)

没有过滤器,

cid = DB[:table_t].select(:table_t__curr_id).
                    join(:table_c, :curr_id=>:curr_id, :alpha_id=>'XXX').
                    join(:table_b, :bic=>:table_t__bic, :name=>'Foo')
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我使用pgsql 9.0

Jer*_*ans 7

这是纯粹的续集方式:

cid = DB[:table_t].select(:table_t__curr_id).
  join(:table_c, :curr_id=>:curr_id).
  join(:table_b, :bic=>:bic).
  filter(:table_c__alpha_id => 'XXX',
         :table_b__name => 'Foo')
Run Code Online (Sandbox Code Playgroud)

请注意,您也可以在没有WHERE的情况下执行此操作,因为您正在使用INNER JOIN:

cid = DB[:table_t].select(:table_t__curr_id).
  join(:table_c, :curr_id=>:curr_id, :alpha_id=>'XXX').
  join(:table_b, :bic=>:bic, :name=>'Foo')
Run Code Online (Sandbox Code Playgroud)