110000 | 12000 | 0 | 0 | 1 | 5000 |
110001 | 12006 | 1 | 200 | 0 | 0 |
110002 | 12012 | 0 | 0 | 1 | 20000 |
110003 | 12018 | 1 | 500 | 0 | 0 |
110004 | 12024 | 1 | 1000 | 0 | 0 |
<표1>
idx |번호1|번호2|인식번호
1 | 110000 | 12000 | 2 |
1 | 110001 | 12006 | 0 |
1 | 110002 | 12012 | 0 |
2 | 110000 | 12000 | 2 |
2 | 110001 | 12006 | 0 |
2 | 110002 | 12012 | 0 |
3 | 110000 | 12000 | 2 |
3 | 110001 | 12006 | 0 |
3 | 110002 | 12012 | 0 |
4 | 110000 | 12000 | 2 |
4 | 110001 | 12006; | 0 |
4 | 110002 | 12012 | 0 |
5 | 110000 | 12000 | 2 |
5 | 110001 | 12006 | 0 |
5 | 110002 | 12012 | 0 |
<표2>
유저번호 |날짜
1 | 20140831 |
2 | 20140901 |
3 | 20140902 |
4 | 20140902 |
5 | 20140903 |
<표3>
표1에 데이터를 받아서 표2에서 표3의 유저번호를 추가하여 넣고 있었는데, 표1에 데이터가 추가되었습니다. 원래는 110000~110002까지만 있었지요.
그래서 추가된 110003 12018과 110004 12024를 표2에도 idx만큼 추가시켜야 하는데 이걸 한번에 할 수 있는 방법은 없을까요?
DECLARE @IDX INT
SELECT @IDX, A.번호1, A.번호2, 0 FROM [표1] AS A WHERE NOT EXISTS ( SELECT B.번호2 FROM [표2] AS B WHERE B.번호1 = A.번호1 AND B.IDX = @IDX )
이렇게 쿼리를 짜면 하면 IDX별로 없는 데이터를 차집합으로 추려낼 수 있는데, 메겨진 IDX가 몇천개 있는 상황에서 하나하나 작업하려니 작업시간이 너무 길어질 것 같습니다. 방법이 없을까요?
Comment 3
-
항해자™
2014.09.03 20:51
-
항해자™
2014.09.03 21:00
맞다면, 이런식으로 하면 되지 않을까요??
;with cteIdxList as (
select distinct
idx
from dbo.tTest2
)
, cteNewIdxList as (
select a.idx
, b.cNumber1
, b.cNumber2
, b.cIdentNo
from cteIdxList as a
cross join
dbo.tTest1 as b
)
insert into dbo.tTest2
select a.idx
, a.cNumber1
, a.cNumber2
, a.cIdentNo
from cteNewIdxList as a
left outer join
dbo.tTest2 as b
on b.idx = a.idx
and b.cNumber1 = a.cNumber1
where b.cNumber1 is null
-
사이드사이드
2014.09.04 14:48
네 말씀하신 부분이 맞습니다. 해당 쿼리도 where 절을 NOT EXISTS로 해서 한번 더 표2번으로 검색해주면 원하는 결과가 나오네요. 친절한 조언감사합니다. 좋은하루되세요
idx 만큼이라면,,, idx가 100개면 각 idx에서 없는 번호1에 해당하는 값만 해당 idx로 추가해 주면 되는건가요??