4

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';

続編に行き詰まっています。フィルタリングの方法がわかりません。これまでのところ、次のようになっています。

 cid= table_t.select(:curr_id).
                    join(:table_c, :curr_id=>:curr_id).
                    join(:table_b, :bic=>:bic).
                    filter( ????? )  

上記よりも優れたイディオムでの回答も歓迎します.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')

フィルターなし、

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

ところで私はpgsql 9.0を使用しています

4

3 に答える 3

7

これは純粋な Sequel の方法です。

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

INNER JOIN を使用しているため、WHERE なしでこれを行うこともできることに注意してください。

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')
于 2010-12-21T16:47:49.877 に答える
0

いつでも次のようなものを使用できると思います

.filter('table_c.alpha_id = ? AND table_b.name = ?', 'XXX', 'Foo')
于 2010-12-21T14:37:28.057 に答える
-1

覚えておくべきことの 1 つは、Sequel では生の SQL を使用できることです。クエリを SQL として表現した方が簡単な場合は、後で見つけられるように必ずコメントしてください。その後、その行に戻って調整し、Sequel の素晴らしさを利用できるようにします。

ただし、ORM を使用してクエリを生成する大きな理由の 1 つである移植性が低下するため、特定の DBM に固有のものは避けるようにしてください。

于 2010-12-21T16:35:33.137 に答える