array타입의 column에서 array로 값을 찾고 싶습니다.

조회수 2380회

아래와 같은 테이블이 있습니다.

Books Table
-----------------------
COLUMN NAME  |  TYPE
id           |  integer
name         |  character varying
subjects     |  character varying []

subjects가 {education, business, history} 이런식으로 저장되는 array 타입일때

subjects에 {history, business}가 있는지 검색하고 싶습니다.(OR조건으로요, history나 business가 둘중 하나 들어있으면 됨) array타입은 array로 어떻게 검색해야 하나요?

Book.where(subjects: ["hisotyr, business"])는 안되더라구요.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • Book.where(Book.arel_table[:subjects].overlap(['hisotyr', 'business']))
    or
    Book.where.overlap(subjects: ['hisotyr', 'business'])

    혹은

    Book.where(Book.arel_table[:subjects].contains(['hisotyr', 'business']))
    or
    Book.where.contains(subjects: ['hisotyr', 'business'])

    필요에 맞는 걸로 사용하세요. 위의 것은 sql 에서 && 고 아래것은 @> 입니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 답변감사합니다! 그런데 NoMethodError: undefined method `overlap' 으로 error가 뜨네요. 그리고 아래 contains도 같은 에러가 뜹니다. ㅠㅠ 알 수 없는 사용자 2016.2.16 17:43

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)