2010-08-12 2 views
3

번역이라는 테이블이 있습니다. (그리고 해당하는 ActiveRecord 클래스). 이 테이블에는 다음 필드가 포함되어 있습니다. ID, 키 및 값Rails3 및 Arel을 사용하여 IN 및 subselect를 선택하십시오.

키가 주어진 쿼리 + 쿼리와 일치하지 않는 모든 번역을 선택하고 키를 번역과 공유하는 모든 번역을 선택하고 싶습니다. 이는 쿼리와 일치합니다.

결과 SQL은 다음과 같이 보일 수 있습니다 :

SELECT * FROM TRANSLATIONS where key in 
    (select key from Translations where value like '%some search%') 

나는 몇 가지를 시도했습니다,하지만 난 그것을 알아낼 수 없습니다. Arel에서 이것을 표현하는 방법에 대한 아이디어가 있으십니까? 이 같은

답변

3

뭔가 작업을해야합니다 :

t = Table(:translations) 
c = t.where(t[:value].matches('%some search%')).project(:key) 
t.where(t[:key].in(c)) 
+0

안녕 감사합니다. 이 코드는 SQL 문을 생성하지만 SQL 문을 생성합니다. 그러나 mysql은 구문 오류로 인해 불만을 나타냅니다. 그것은 다음을 렌더링합니다 : SELECT'번역 '. * FROM'번역'WHERE ('translations'.'key') (SELECT 키 FROM'번역'WHERE'번역'. 값'LIKE '% 값 1 %')) 렌더링 할 때 : SELECT'translations'. * FROM'translations' WHERE ('translations'.'key' IN (SELECT'translations'.'key' FROM'translations' WHERE'translations'.value) 'LIKE '% value1 %')) 이것을 제어 할 수있는 방법이 있습니까? –

+1

프로젝트 사용 (: 'translations.key') – valodzka

3

유사 @valodzka하는 것이 아니라 "t [...]"는 주위를 추가 : 키 기호에게 답변을

t = Table(:translations) 
c = t.where(t[:value].matches('%some search%')).project(t[:key]) 
t.where(t[:key].in(c)) 
관련 문제