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 41682 게시물 읽기
No. 41682
join의 조건보다 where 구문의 조건이 먼저 읽혀 발생하는 문제...
작성자
조인씨
작성일
2019-01-22 22:15ⓒ
2019-01-22 22:27ⓜ
조회수
2,599

 

SELECT * FROM a
INNER JOIN b 
ON a.id = b.id and 
b.data is not null 
WHERE a.something = something AND 
function(b.data) <> 'something' 
 
이런 형태의 sql 있는데 
join조건 b.data is not null 보다 
where조건의 function(b.data) <> 'something' 부분이 
먼저 실행 되어 b.data가 null일경우 
에러가 발생하는데
펑션은 그대로 두고 해결할수 있는 방법이 없을까요?? 
이 글에 대한 댓글이 총 1건 있습니다.

해당 조건은 조인 조건이 아닌 걸로 보입니다.
ON 절이 아닌 WHERE 절에 기술되어야 할 조건이네요.
WHERE 절로 이동하셔야 하는데요.
이동한다고해서 해당 조건이 먼저 수행된다는 보장은 없습니다.
조건절의 수행순서를 조정하는 힌트 /*+ ordered_predicates */ 를 이용해 보세요.


SELECT /*+ ordered_predicates */ *
  FROM a
 INNER JOIN b
    ON a.id = b.id
 WHERE a.something = 'something'        -- 1
   AND b.data IS NOT NULL               -- 2
   AND function(b.data) <> 'something'  -- 3
;


다만 이 힌트를 사용할 경우 조건절의 순서를 효율적으로 구성하셔야 합니다.
2,3 번 조건은 순서를 맞춰 주셔야 하구요.
1,2 번 조건중에 어떤 조건이 먼저 수행되는 것이 유리할지?
잘 판단해서 순서 조정하셔야 합니다.

마농(manon94)님이 2019-01-23 08:53에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
41686rman 에서 아카이브 5개만 남기고 삭제하기..
허겅스
2019-01-26
2335
41684where절에 조건문으로 비교연산자를 사용하고싶습니다. [2]
도토리
2019-01-23
2979
41683오라클11과 오라클 12 [2]
신승익
2019-01-23
2932
41682join의 조건보다 where 구문의 조건이 먼저 읽혀 발생하는 문제... [1]
조인씨
2019-01-22
2599
41680무료 오라클 관리툴인 DBAny 2019 버전 발표!
박희성
2019-01-12
2524
41679is not null [5]
아벨의꿈
2019-01-08
2485
41677ORACLE 접근하여 table 수정한 사람의 IP 및 이력을 조회 하려면? [2]
송영일
2019-01-07
2712
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다