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 40992 게시물 읽기
No. 40992
쿼리 질문 있습니다 (left join)
작성자
검콤이(검콤이)
작성일
2015-11-05 17:49ⓒ
2015-11-20 08:18ⓜ
조회수
8,809

아래 총 SELECT 한 정보가.

 

C 테이블 BASIC002 쪽의 TEM_ID 변화로 인해

 

총 결과 갯수가 달라질수 있는지 문의드립니다.

 

 

 

단순 LEFT 조인이면. 달라질수 없지만.

 

WHERE 조건절에 C 테이블에 대한 조건이 있어서.. 변동이 일어날 가능성이 있지 않을까

 

싶어서 여쭤봅니다.

 

감사합니다.

 

 

 

 

--------------------------------------------------------------------------------

 

 

 

Select A.TERM_ID, A.Pernr, A.REGI_DATE, A.REGI_TIME,

 

A.PASS_CLSS, B.EName, C.Work_Name

 

From AAA A

 

Left Join BBB B On A.Pernr = B.Pernr

 

Left Join CCC C On A.Term_Id = C.Term_Id

 

Where A.REGI_DATE >= ''' + ADate + '''' +

 

And A.REGI_DATE <= ''' + NxtDate(ADate) + '''' +

 

And C.Work_Name = ''' + FPManager_DM.work_name + ''' ' +

 

And A.PASS_CLSS <> '4'

 

And A.TYPE = '1'

 

ORDER BY A.Pernr, A.REGI_DATE, A.REGI_TIME

 

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

당연히 달라집니다 -_-;;;

Where 조건절에 걸려있는

And C.Work_Name = ''' + FPManager_DM.work_name + ''' ' + //근무지

'') 상기 조건으로 인해..

데이터 건수에 차이가 발생하게 됩니다.

즉, C 로 Alias 건 테이블에 해당 데이터가 없으면

안나오게 되요..

Outer로 건 의미가 사라지죠..

내부적으로 Inner Join 한것과 같은 효과가 나타나니까요..

 

쿼리를 아래와 같이 수정하고 결과를 보시면 될듯요..

 

-------쿼리시작-------

Select A.TERM_ID, A.Pernr, A.REGI_DATE, A.REGI_TIME, 

A.PASS_CLSS, B.EName, C.Work_Name 

From FOOD001 A 

Left Join EMPMASTER B On A.Pernr = B.Pernr 

Left Join BASIC002 C On A.Term_Id = C.Term_Id 

                                       And C.Work_Name = ''' + FPManager_DM.work_name + ''' ' + //근무지

Where A.REGI_DATE >= ''' + ADate + '''' + //금일부터

And A.REGI_DATE <= ''' + NxtDate(ADate) + '''' + //익일까지

And A.PASS_CLSS <> '4' //인증성공데이터

And A.TYPE = '1' //카드사용자 

ORDER BY A.Pernr, A.REGI_DATE, A.REGI_TIME

 

최한영(terry0515)님이 2015-11-05 18:52에 작성한 댓글입니다.

친절한 답변 감사드립니다!

저렇게 A테이블이 아닌 다른 테이블을 조건절에 주면 Inner 조인이 일어나는게

맞군요!

감사합니당!

검콤이(검콤이)님이 2015-11-06 08:10에 작성한 댓글입니다.

그리고, WHERE 절 위로 AND 절이 갈 수도 있는 거였나요?

감사합니다.

검콤이(검콤이)님이 2015-11-06 10:48에 작성한 댓글입니다.

단순히 조인 없이

테이블 하나로만 Select 했다면 불가능했겠죠 ^^

Join 조건절 ( On ) 에 걸었으니 가능한거구요.

 

Left Join BASIC002 C On A.Term_Id = C.Term_Id 

                                       And C.Work_Name = ''' + FPManager_DM.work_name + ''' ' + //근무지

                                      Or C.Work_Name = ''' + FPManager_DM.work_name + ''' ' + //근무지

 

저런 형태로, Where 조건절에 들어가는 모든 것들 ( Exists , Like, And, Or, 그외 기타 등등 )

도 On 절에서 사용 가능합니다^^

최한영(terry0515)님이 2015-11-06 11:04에 작성한 댓글입니다.

아하!!!

친절한 답변 정말 감사드립니다!

수고하세요~!!

검콤이(검콤이)님이 2015-11-06 11:45에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40996공백 추가 해주는 쿼리 [3]
민식이
2015-11-06
9225
40995SQL질문입니다 [3]
장현섭
2015-11-06
8585
40993아리송한 SQL 급하게 질문합니다. [4]
개뚱이
2015-11-06
8440
40992쿼리 질문 있습니다 (left join) [5]
검콤이
2015-11-05
8809
40991계층형 구조에서 질문 있습니다. [3]
박양희
2015-11-05
8900
40990IN 구문 에러 [1]
끙끙~
2015-11-05
8194
40987데이터중 소숫점이 있는데이터만 추출..부탁드립니다. [3]
개발자
2015-11-03
8662
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다