질문있습니다.(쿼리관련) 0 4 932

by 달콤꼬야 [PL/SQL] [2017.07.14 15:47:16]



A
지출내역|문서코드|날짜|처리자
핸드폰|AA1|20170705|김처리
과자|AA1|20170705|김일자
사탕|AA2|20170705|김처리

B
문서코드|순번|문서명
AA1|1|지출내역1
AA2|1|지출내역1

위와같은 테이블이 있다고 가정했을때

파라미터로 '지출내역'을 받습니다.
예를들어 '핸드폰'을 파라미터로 받으면

SELECT * 
FROM A A
LEFT JOIN B B
ON A.문서코드 = B.문서코드

WHERE A.문서코드 = (SELECT AA.문서코드 FROM A  AA WHERE A.지출내역 = AA.지출내역 AND '핸드폰' IN (AA.지출내역))

AND A.문서코드 = (SELECT AA.문서코드 FROM A  AA WHERE A.처리자= AA.처리자AND '김일자' IN (AA.처리자))

 

즉 해당 지출내역이 포함된 문서코드에 해당하는 데이터는 모두 가져오고 싶습니다.

또한 해당 테이블은 예를 든것으로 실제로는 더 많은 컬럼의 값을 검색하는 파라미터를 받아오며 다 저런식으로 해당 파라미터를 포함하는 문서번호의 데이터를 다가져와야 합니다.

저런식으로 짜는게 옳을까여ㅠㅠㅠ아니면

다른 좋은 방법이 있을까여ㅠㅠ

by jkson [2017.07.14 16:17:35]
select *
from a 
left outer join b
on a.문서코드 = b.문서코드
where a.지출내역 = '핸드폰'
and a.처리자 = '김일자'

 


by 달콤꼬야 [2017.07.14 16:21:36]

답변 감사합니다.

그런데 저는 핸드폰을 검색하면

핸드폰이 포함된 문서번호 AA1의 데이터인 핸드폰/ 과자 둘다 나오도록 하고싶은데 이렇게하면 핸드폰만 나오지 않을까요?


by jkson [2017.07.14 16:34:25]

아 문서번호가 중복이군요 ㅋㅋ

select *
from a 
left outer join b
on a.문서코드 = b.문서코드
where a.문서코드 in (select 문서코드 
                       from a
                      where 지출내역 = '핸드폰'
                        and 처리자 = '김일자')

by 마농 [2017.07.14 16:52:21]
WITH 지출 AS
(
SELECT '핸드폰' 지출내역, 'AA1' 문서코드, '20170705' 날짜, '김처리' 처리자 FROM dual
UNION ALL SELECT '과자', 'AA1', '20170705', '김일자' FROM dual
UNION ALL SELECT '사탕', 'AA2', '20170705', '김처리' FROM dual
)
, 문서 AS
(
SELECT 'AA1' 문서코드, 1 순번, '지출내역1' 문서명 FROM dual
UNION ALL SELECT 'AA2', 1, '지출내역1' FROM dual
)
SELECT *
  FROM 지출 a
 INNER JOIN 문서 b
    ON a.문서코드 = b.문서코드
 INNER JOIN 지출 c
    ON b.문서코드 = c.문서코드
 WHERE a.지출내역 = NVL(:v_지출내역, a.지출내역)
   AND a.처리자   = NVL(:v_처리자  , a.처리자)
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입