이번에 내가 해결했어야 했던 문제는
예로 들자면
회사의 대표번호를 검색해야 해당 회사가 출력되던 기능을
한 회사의 저장되어 있는 임의의 전화번호를 검색 시 해당 회사출력 될 수 있게 기능을 수정하는 것과 같았다
그래서 생각해 낸 방법은
1. 회사의 모든 연락처를 조인해오고 회사이름으로 GROUPBY 하기
2. where문에서 서브쿼리로 모든 연락처테이블을 참조해서 불러오기
1번 방법은 나중에 쿼리를 수정할 때를 전체 테이블을 groupby 하는건 불편할 것 같고 느리기 때문에
2번 방법을 적용하기로 했다.
>>>where문에서 서브쿼리로 모든 연락처테이블을 참조해서 불러오기
where a.iw_pay_no in (
select r1.iw_pay_no
from (
select case WHEN ip2.multi_iw_yn='Y' Then IR.IW_No else ip2.iw_no End as iw_no ,ip2.IW_Pay_No--,ir.Seq
FROM TB_IW_PAY ip2 WITH(NOLOCK, READUNCOMMITTED)
LEFT outer JOIN TB_IW_PAY_REF ir WITH(NOLOCK, READUNCOMMITTED) on ip2.iw_pay_no=ir.IW_Pay_No
)as r1
where r1.iw_no LIKE ISNULL(s.iw_no, '')+'%'
group by r1.iw_pay_no
)
위 쿼리를 설명하자면
회사의 연락처가 여러개라고 할 때 TB_IW_PAY_REF가 생성되는데
연락처가 여러개라고 알려주는 컬럼이 mulit_iw_yn이다
따라서 multi_iw_yn ='Y' 일때는 REF테이블에서 번호를 참조하고 N일때는 대표번호를 검색할 수 있게 구문을 짰다.
그리고 s.iw_no이 검색 테이블인데 해당 연락처를 조회할 시에
중복되는 회사 no을 없애기 위해 groupby를 해주었다.
'개발 > SQL' 카테고리의 다른 글
[MS-SQL] nolock (0) | 2022.12.24 |
---|---|
[mssql] 백업테이블로 데이터 보존하기 (0) | 2022.12.20 |
[mssql] 반복문 사용해서 테이블 돌기 (0) | 2022.12.19 |
트랜잭션의 격리 수준 isolation (0) | 2022.12.07 |
SQL : INSERT INTO (0) | 2022.11.01 |