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 40842 게시물 읽기
No. 40842
(수정) 설명이 부족했습니다..도움부탁드립니다.
작성자
궁금
작성일
2015-07-01 21:29ⓒ
2015-07-02 10:23ⓜ
조회수
7,330

A TABLE에

 

ID_A | TYPE1 | TYPE2

 

100 | B | S

200 | B | S

300 | B | S

 

B.TABLE에

 

ID_B | ID_A | TYPE | ID_C

 

1 | 100 | B | C101

2 | 100 | S |

3 | 200 | B | C101

4 | 200 | S | C102

5 | 300 | B | C101

6 | 300 | S | C103

 

 

C.TABLE에

 

ID_C | TYPE | STATUS

 

C101 | B | 3

C102 | S | 3

C103 | S | 0

 

이렇게 구성되어 테이블 통해서.

 

 

ID_A | TYPE | ID_C | TYPE | ID_C

 

100 | B | C101 | S | 0

300 | B | C101 | S | 0

 

 

인것들만 추려내는 작업을 맡았습니다.

 

가능할런지요.

 

즉.C.TABLE에 존재 하지 않거나 존재하더라도 STATUS가 3이아닌것만 뽑아내야하지요..

 

가르침을 좀 주세요...도저히 안떠오르네요..

 

데이타 역시 수십만건 이상입니다..ㅠㅠ

 

 

 

 

 

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

select a.id_a, a.type1, b1.id_c, a.type2, b2.id_c

from a, b b1, b b2

where a.id_a=b1.id_a

and a.type1=b1.type

and a.id_a=b2.id_a

and a.type2=b1.type

이정도면 나오지않을까요

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

(추가1)조건이 이해가 안되는데요

C.TABLE에 존재 하지 않거나 존재하더라도 STATUS가 3이아닌것만 뽑아내야하지요 가 아닌

B.TABLE의 ID_C의 결과가 없거나, C.TABLE의 STATUS가 3이 아닌것을 뽑아야하는건가요?

셀(bbads)님이 2015-07-02 10:14에 작성한 댓글입니다.
이 댓글은 2015-07-02 10:39에 마지막으로 수정되었습니다.

WITH a AS
(
SELECT 100 id_a, 'B' type1, 'S' type2 FROM dual
UNION ALL SELECT 200, 'B', 'S' FROM dual
UNION ALL SELECT 300, 'B', 'S' FROM dual
)
, b AS
(
SELECT 1 id_b, 100 id_a, 'B' type, 'C101' id_c FROM dual
UNION ALL SELECT 2, 100, 'S', ''     FROM dual
UNION ALL SELECT 3, 200, 'B', 'C101' FROM dual
UNION ALL SELECT 4, 200, 'S', 'C102' FROM dual
UNION ALL SELECT 5, 300, 'B', 'C101' FROM dual
UNION ALL SELECT 6, 300, 'S', 'C103' FROM dual
)
, c AS
(
SELECT 'C101' id_c, 'B' type, 3 status FROM dual
UNION ALL SELECT 'C102', 'S', 3 FROM dual
UNION ALL SELECT 'C103', 'S', 0 FROM dual
)
SELECT a.id_a
     , a.type1
     , MIN(DECODE(a.type1, b.type, c.id_c)) id_c1
     , a.type2
     , MIN(DECODE(a.type2, b.type, c.id_c)) id_c2
  FROM a
  LEFT OUTER JOIN b
    ON a.id_a = b.id_a
   AND b.type IN (a.type1, a.type2)
  LEFT OUTER JOIN c
    ON b.id_c = c.id_c
   AND b.type = c.type
   AND c.status = 3
 GROUP BY a.id_a, a.type1, a.type2
 HAVING COUNT(c.status) < 2
;

마농(manon94)님이 2015-07-02 11:45에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40845LEFT JOIN 에서 일반적인 콤마 조인으로 변경 질문드립니다. [1]
김희성
2015-07-03
7797
40844오라클 -> mysql [1]
김다윗
2015-07-03
7824
40843SQL 쿼리 중간값 빠진값 찾기 쿼리 도움 부탁드려요 [3]
김희성
2015-07-01
8166
40842(수정) 설명이 부족했습니다..도움부탁드립니다. [2]
궁금
2015-07-01
7330
40840튜닝시 Cost / Response Time 중 어느걸 선택해야 하는지? [1]
박명수
2015-06-25
7241
40839[질문] Cent OS 6 에 오라클 9i 64비트 설치 문의 [1]
궁금이
2015-06-23
7708
40838시간의 총합을 구하는 문의 [2]
카멜
2015-06-22
7275
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다