mageTB 이미지 테이블
IDX | FNAME
1 | a.jpg
2 | b.jpg
3 | s.jpg
myTB 정보 테이블
F_IDX | TITLE | NAME
1,3 | 제목 | 이름
2,3 | 제목 | 이름
1 | 제목 | 이름
myTB 의 F_IDX 값이 imageTB 의 idx 값입니다.
1개 의 번호 일 수도 있고, 여러개의 번호로 콤마로 들어 갈 수도 있습니다.
이런 상태에서 F_IDX 값으로 imageTB 테이블의 IDX 값과 비교해서 이미지 파일 이름을 불러 오고 싶습니다.
결과는 아래와 같이 하고 싶습니다.
a.jpg,s.jpg | 제목 | 이름
b.jpg,s.jpg | 제목 | 이름
a.jpg | 제목 | 이름
myTb 를 한 번 돌리고 그 안에서 F_IDX 로 쿼리를 한 번 더 해서 가져오면 되겠지만
데이타가 많을 경우 좋은 방법이 아닐 것 같아서요.
Comment 2
-
항해자™
2016.12.06 15:46
-
항해자™
2016.12.06 15:51
위에 등록한 함수를 이용해서 풀어 봤습니다,,,
;with cteBoardMain (cFileNo, cTitle, cName) as ( select '1,3', '제목1', '이름1' union all select '2,3', '제목2', '이름2' union all select '1', '제목3', '이름3' ) , cteImageList (cFileNo, cFileName) as ( select 1, 'a.jpg' union all select 2, 'b.jpg' union all select 3, 'c.jpg' ) select a.cTitle , a.cName , stuff ( ( select ', '+ b.cFileName from dbo.fnTbl2Int(a.cFileNo,',') as a inner join cteImageList as b on b.cFileNo = a.cValue for xml path('') ) , 1 , 2 , '' ) as cFileList from cteBoardMain as a go
xml 파싱과 stuff를 이용해서 풀수 있겠네요,,,
더 좋은 방법은 다른분이,,,
create function dbo.fnTbl2Int
( @pString nvarchar(max)
, @pSplit char(1)
) returns @tblResult table (
cRows int not null
, cValue int not null
) as
begin
declare @xmlString xml
set @xmlString = convert(xml,N'<x n="'+ replace(@pString,@pSplit,'"/><x n="') +'"/>')
insert into @tblResult
( cRows
, cValue
)
select row_number() over(order by (select 1))
, col.value('@n','int')
from @xmlString.nodes('/x') as a (col)
return
end
go