파라미터로 2개 이상의 값을 받을때 조건절 처리에 대해 질문드립니다. 0 2 3,283

by 거북이 [SQL Query] 오라클 sql 쿼리 [2023.12.13 14:52:30]


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의 값 모두를 조건으로 충족시킬 수 있는 방법이 있을까요? 테이블 구조 변경은 불가능합니다...

 

파라미터를 넘기는 방법이나 쿼리를 어떻게 짜야될지 알려주시면 감사하겠습니다.

by 마농 [2023.12.13 15:12:54]

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
;

 


by 거북이 [2023.12.13 15:20:09]

감사합니다. 도움이 되었습니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입