2010-12-21 3 views
4

이 속편에 도움이 전송 SQL을 필요로하는 곳에 : 는
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(?????) 

위보다 더 나은 관용구로 대답해도 잘됩니다.

UPDATE : 나는 필터가없는

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

가 BTW 내가 당신을 생각 9.0

+1

'속편'이전 이름이었다, 요즘 우리는 그것을 'SQL'이라고 부른다. – Zabba

+0

그가 "SQL"을 의미한다고 생각한다. 어떤 사람들은 "속편"으로 해석한다. – Tobias

+4

http://sequel.rubyforge.org/ –

답변

7

이 순수한 속편의 방법입니다 : 당신은 INNER JOIN을 사용하고 있기 때문에 당신은 또한, WHERE없이이 작업을 수행 할 수 있습니다

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

참고 :

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

pgSQL의 사용 항상

과 같은 것을 사용할 수 있습니다.
.filter('table_c.alpha_id = ? AND table_b.name = ?', 'XXX', 'Foo') 
-1

기억해야 할 점 중 하나는 Sequel이 원시 SQL을 사용할 수 있다는 점입니다. SQL이 진행됨에 따라 쿼리를 표현하는 것이 더 쉬운 경우 나중에 주석을 찾을 수 있도록 주석을 달아주십시오. 그런 다음 당신은 그 라인으로 돌아와 그것을 속편의 굉장함을 이용하도록 조정할 수 있습니다.

ORM을 사용하여 쿼리를 생성 한 큰 이유 중 하나 인 이식성을 줄이기 때문에 특정 DBM에만 해당되는 것을 피하십시오.

관련 문제