database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 8087 게시물 읽기
No. 8087
【질문】WHERE절에서 IN안에 Case When으로 복수개의 조건 입력하기??
작성자
아빠
작성일
2009-07-02 15:14
조회수
8,042

안녕하세요 처음으로 조문좀 얻어보려고 합니다.
PostgresSQL은 잘 모르고, 시간은 없고.. 
 
WHERE구문에서 구문에러가 나는데 원인은  'W02' , 'W04' 복수의 조건 문자열(?)을 추출하는데 생깁니다
IN에서  복수의 조건을 얻기위한 Case When 작성좀 부탁드립니다.


WHERE
  problem_id
  IN (
    CASE  ?
    WHEN  '01' THEN
     'W01'
    WHEN  '02' THEN
     'W02' , 'W04'           ←★에러의 원인 여기를 'W02' 하나만 쓰면 에러가 안나네요.
    END
   )

이 글에 대한 댓글이 총 4건 있습니다.

그 전에, when .... then 사이에 조건이 이상하지 않나요?

어떤 조건이 '02'랑 같은 problem_id 값이 'W02' 이거나, 'W04' 인것을 찾아라는 식 같은데,

쿼리문이 모호하게 표현되어 답 찾기가 힘드네요.


뭐, 정 저럭식으로 풀어야한다면, case when ..then end 구문을 두번 쓰면 될 것 같네요.

김상기(ioseph)님이 2009-07-02 18:37에 작성한 댓글입니다.

오해하셨네요. IN( ... ) 에 들어가는 것은 sub query이고 CASE A WHEN B에서 B에 들어가는 것은 단일 값입니다. 문법 상 이런 식으로 조합해서 쓸 수 있는 것이 아니죠.

그냥 query string를 만들 때에 IN 안의 값을 직접 지정하세요. sql로 모두 해결하려고 하지 마시고...

아니면... 이렇게...

WHERE ('01' = ? AND problem_id = 'W01') OR ('02' = ? AND problem_id IN ('W02', 'W04'))

박성철(gyumee)님이 2009-07-02 18:48에 작성한 댓글입니다.
이 댓글은 2009-07-02 18:50에 마지막으로 수정되었습니다.

박성철(gyumee)님 감사합니다.
서브쿼리 였군요..
요즘은 도통 SQL을 안만져서.. 바보가 되어갑니다.
서브 쿼리에 힌트를 얻어서 작성해 봤습니다. 잘 되네요.
더 좋은 쿼리 있으면 한수 가르쳐 주세요 ++;

FROM
 m_problem,
 (
  select 'W01' AS problem_id , '01' AS kubun union    ←선택값이 많이 나올것으로 예상되어....
  select 'W02', '01' union
  select 'W06', '02' union
  select 'W07', '02' union
  select 'W08', '03' 
 ) ids
WHERE 
 year >= 2001 
 AND year <= 2009
 AND ids.kubun = ?
 AND ids.problem_id = m_problem.problem_id

세아아빠님이 2009-07-02 19:46에 작성한 댓글입니다.
이 댓글은 2009-07-02 19:48에 마지막으로 수정되었습니다. Edit

뭔가 멋지게 해결하셨나보네요. ^^

저도 도통 DB 만질 기회... 아니 프로그래밍 할 기회가 줄어들어서... 쩝...

박성철(gyumee)님이 2009-07-03 10:39에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
8100테이블명을 전달인자로 해서 호출하기 [3]
궁굼이
2009-07-03
6273
8099[검증요청]오라클의 add_months()처럼 할려면??
급해요
2009-07-03
7119
8092응용프로그램에서 DB현재시간 가져오기... [1]
이기자
2009-07-02
8749
8087【질문】WHERE절에서 IN안에 Case When으로 복수개의 조건 입력하기?? [4]
아빠
2009-07-02
8042
8078PostgreSQL 8.4 Release Now Available [2]
김도경
2009-07-01
6366
8076PL/pgSQL에서 상수정의 방법 [3]
김재현
2009-06-30
6524
8075이게 가능합니까? [3]
souler
2009-06-30
6484
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다