Item 이라는 테이블이 있고 값이 아래와 같이 레코드 1개만 있다고 했을경우입니다.
| *Table: Item | ||
| GB | Key | Value |
| 1 | abc | A |
Condition이라는 변수의 파라미터를 받아오는데 2개 이상의 값을 가지고 있는 상태라고 치고,,,
A, B라는 값을 Condition변수에 담아 보낸다고 했을때 IN 조건을 사용하면 string Condition = "'A','B'" 로 셋팅하여 아래와 같이 Key의 값인 abc를 추출할 수 있습니다.
SELECT Key FROM Item WHERE Key = 'abc' AND Value IN (:Condition) ; 이런식으로 조회할 수 있다고 생각합니다.
하지만 여기서 질문드리고 싶은건 Key 컬럼의 값 abc를 기준으로 Value가 파라미터로 넘겨받은 변수를 모두 충족했을때 SELECT으로 Key를 추출하고 싶습니다.
다시말해, 위와같이 A와 B를 넘겨줬는데 현재 테이블엔 Value가 A만 있는 상태이므로 Key의 abc를 추출할 수 없게 하고 싶습니다.
IN을 사용하면 위 처럼 구성하여 셋팅할 수 있지만 조건이 성립되어 Key의 abc가 보이기 때문에
Key의 값을 기준으로 A, B의 값 모두를 조건으로 충족시킬 수 있는 방법이 있을까요? 테이블 구조 변경은 불가능합니다...
파라미터를 넘기는 방법이나 쿼리를 어떻게 짜야될지 알려주시면 감사하겠습니다.
1. 우선 Value IN (:Condition) 형태의 바인드 변수 방식으로는 결과가 안나옵니다.
- 바인드 변수가 아닌 문자열 연결로 쿼리를 동적으로 완성하는 방식이어야만 결과가 나옵니다.
- 예를 들면 " Value IN (" + Condition + ")" 요런 형태
2. 원하는 결과를 얻는 쿼리는 다음과 같습니다.
SELECT Key
FROM Item
WHERE Key = 'abc'
AND Value IN ('A', 'B')
GROUP BY Key
HAVING COUNT(*) = 2
;
감사합니다. 도움이 되었습니다!