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.처리자))
즉 해당 지출내역이 포함된 문서코드에 해당하는 데이터는 모두 가져오고 싶습니다.
또한 해당 테이블은 예를 든것으로 실제로는 더 많은 컬럼의 값을 검색하는 파라미터를 받아오며 다 저런식으로 해당 파라미터를 포함하는 문서번호의 데이터를 다가져와야 합니다.
저런식으로 짜는게 옳을까여ㅠㅠㅠ아니면
다른 좋은 방법이 있을까여ㅠㅠ
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.처리자) ;