2017-10-13 5 views
0

밑줄 ("Cas_NO")가있는 열 이름이 특정 문자열과 일치하는 POSTGRES 테이블에서 행/행을 가져 오려고합니다. 내가 문제 작업 쿼리 공식화하는 데 : 위의 코드를 실행PLUCK one row 어디 postgres 열 이름에 밑줄이 포함되어 있습니까

@array_a = ["a", "b", "c"] 
@array_b 
@array_a.each do |a| 
    @array_b << Database.where("\"BAS_No\" = ?", a).pluck(:INBC_name) 
end 

것은 나에게 데이터베이스 테이블의 전체 행을 제공뿐만 아니라 어디에서 "BAS_No"일치 "a"또는 "b"또는 "c" @array_a

답변

0

실제 코드가 아닙니다. 이 말하는 :

Database.where("\"BAS_No\" = ?", %w[a b c]) 

는 SQL을 생성합니다 WHERE 같은 절 :

where ("BAS_No" = 'a','b','c') 

당신이 ActiveRecord::StatementInvalid 예외가 아닌 데이터의 무리를 얻어야한다 그래서 유효한 SQL 아니다. 경우,

Database.where(:BAS_No => a).pluck(:INBC_Name) 
#--------------^^^^^^^^^^^^ 

나 : 어떤 경우에

, 당신은 값 목록 =을 사용하지 말아야합니다, 당신은이 액티브가 SQL을 구축 할 수 있도록하는 것입니다 얻을 IN하고 쉬운 방법을 사용하려면 당신은 hashrockets에 알레르기 :

Database.where(BAS_No: a).pluck(:INBC_Name) 
#--------------^^^^^^^^^ 

a가 배열, 사람들은 WHERE 절에 IN (...) 표현을 생성 할 것이다 당신은 당신이 예상하는지 다시 받아야합니다.