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
운영게시판
최근게시물
Oracle Q&A 41868 게시물 읽기
No. 41868
서브쿼리 결과 값이 왜 where 절 안에서 왜 안 먹을까요???
작성자
봉달이
작성일
2021-09-07 11:32
조회수
443

안녕하세요...


slq 결과 값이 이해 안 되는 부분이 있어서 여쭤 봅니다. 


SELECT REPLACE('(''4444'',''3333'',''2222'',''1111'')', CHR(35), '') FROM DUAL    <-- 이것의 실행 결과는 


('4444','3333','2222','1111')   <-- 이것 입니다. 



위의 결과를 가지고 아래와 같이 실행 시키면..


1)      select A.*  FROM   aaa A  WHERE   A.BBB IN ('4444','3333','2222','1111')      <-  이것은 데이터가 select 됩니다.  

2)      select A.*  FROM   aaa A  WHERE   A.BBB IN (SELECT REPLACE('(''4444'',''3333'',''2222'',''1111'')', CHR(35), '') FROM DUAL)      <-  이것은 데이터가 select 안 됩니다.  


무엇 때문 일까요????



 

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

1) 번은 IN 에 4개의 조건을 넣은 것이고.

2) 번은 IN 엔 1개의 조건을 넣은 것이죠.

- 따옴표, 컴마, 괄호를 포함한 긴 문자열 1개

마농(manon94)님이 2021-09-07 13:29에 작성한 댓글입니다.

마농님 감사 합니다. 


그럼 마농님 말씀 대로 라면, 


2번 같은 경우를 쓸 수가 없는 것 이네요??


2번 처럼 sql을 변경 할 수는 없을까요??

봉달이님이 2021-09-07 13:38에 작성한 댓글입니다. Edit
-- 1. 동적 쿼리 사용 --
-- 쿼리 문장 자체를 텍스트 형태로 완성하는 방법

-- 2. Select 리스트를 만들어 IN 조건에 투입 --
SELECT a.*
  FROM aaa a
 WHERE a.bbb IN
       (SELECT REGEXP_SUBSTR(v, '[[:alnum:]]+', 1, LEVEL) x
          FROM (SELECT '(''4444'',''3333'',''2222'',''1111'')' v FROM dual)
         CONNECT BY LEVEL <= REGEXP_COUNT(v, '[[:alnum:]]+')
        )
;

-- 3. 문자열 그대로 비교 --
-- 3.1 고정 자리수 코드 --
SELECT a.*
  FROM aaa a
     , (SELECT '(''4444'',''3333'',''2222'',''1111'')' v FROM dual) b
 WHERE INSTR(b.v, a.bbb) > 0
;
-- 3.2 가변 자리수 코드 --
SELECT a.*
  FROM aaa a
     , (SELECT '(''1'',''11'',''111'',''1111'')' v FROM dual) b
 WHERE INSTR(''''||b.v||'''', ''''||a.bbb||'''') > 0
;

 
마농(manon94)님이 2021-09-07 14:12에 작성한 댓글입니다.

감사합니다. 마농님...


잘 연구 해 보고 쓰도록 하겠습니다. 


좋은 하루 되세요..^^...

봉달이님이 2021-09-07 14:40에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
41870ORA-29275: 부분 다중 바이트 문자(테이블 내 다중 분포)
박재덕
2021-10-14
31
41869조회결과에 따라 동적으로 빈 row 추가 [1]
선이
2021-09-09
445
41868서브쿼리 결과 값이 왜 where 절 안에서 왜 안 먹을까요??? [4]
봉달이
2021-09-07
443
41866조건값의 일부분만 가진 행 표시하기 [2]
궁금
2021-08-09
719
41865그룹별 순번 만들기... [1]
궁금이
2021-08-04
758
41864아래글(41858) 최초검사일 기준으로 표시되는 유효기간 수정 방법 문의 대한 추가 수정 문의 [2]
노진규
2021-08-03
765
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2021 DSN, All rights reserved.
작업시간: 0.011초, 이곳 서비스는
	PostgreSQL v13.3으로 자료를 관리합니다