2012-05-25 1 views
0

나는이 테이블에 다음 데이터 TABLE1INSERT/UPDATE/각 행의 SQL을 삭제

SessionID 
S1 
S2 
S3 

내가이 또 다른 TABLE2 내가하고 싶은 무엇

EmployeeID | Session 
1   | NULL 
2   | NULL 
3   | NULL 

이 업데이트입니다에 다음 데이터/각 행을 예를 삽입

UPDATE table2 SET Session= (SELECT SessionID FROM TABLE1) 
INSERT INTO(COPY each row and insert 2nd row session id from table1) 

예상 된 결과 : TABLE2

EmployeeID | Session 
1   | S1 
2   | S1 
3   | S1 
1   | S2 
2   | S2 
3   | S2 
1   | S3 
2   | S3 
3   | S3 

어떤 통찰력이 도움이 될 것입니다.

감사합니다.

답변

2

현재 TABLE2에있는 각 행과 TABLE1의 각 행의 모든 ​​조합에 대해 TABLE2의 행을 원하는 것처럼 들립니다. 그렇다면 ...

BEGIN TRAN 

SELECT * INTO #temp FROM TABLE2 

DELETE TABLE2 

INSERT TABLE2 
(
    EmployeeID, 
    Session 
) 
SELECT 
    temp.EmployeeID, 
    TABLE1.SessionID 
FROM TABLE1 CROSS JOIN #temp temp 

DROP #TEMP 

COMMIT TRAN 
+0

감사합니다. –

+0

안녕 다니엘, 네 길은 일이야. 하지만 난 기본 키 문제에 직면 해있다. table2에서 내 employeeid는 기본 키입니다 .so 나는 세션 및 직원 ID를 후보 키로 만들려고했지만 내 테이블 2 세션이 null이므로 실패합니다. 어떠한 제안? –

+0

'EmployeeID'가'TABLE2'의 프라이 머리 키 여야 만한다면 그 칼럼에 중복 값이 ​​필요하기 때문에 원하는 것을 할 수 없습니다. 현재 키를 제거하고'EmployeeID'와'Session'을 포함하는 새로운 합성 키로 대체 할 수 있다면, 같은'EmployeeID'에 대해 중복 된'Session' 값을 가지지 않는 한 작동 할 것입니다. * EmployeeID 당 하나의 NULL 값을 가질 수는 있지만 그 이상은 될 수 없습니다. –

1

별도의 직원 테이블을 만드는 것이 좋습니다. 당신의 EmployeeSession (TABLE2)에 데이터를 삽입하려면 :

INSERT INTO EmployeeSession (EmployeeID, SessionID) 
    SELECT Employee.ID, [Session].ID 
    FROM Employee, [Session] 
+0

고마워.하지만 대니얼의 대답이 내 상황에 더 적합하다고 생각해. –

0

나는 MERGE 문이 있습니다 생각 : 당신의 빠른 답변

MERGE INTO TABLE2 t2 
    USING (SELECT t2.EmployeeID, t1.SessionID 
FROM TABLE2 t2 
CROSS JOIN TABLE1 t1) t 
     ON t2.EmployeeID = t.EmployeeID AND t2.Session = t.SessionID 
    WHEN NOT MATCHED BY TARGET THEN 
     INSERT (EmployeeID, Session) VALUES(t.EmployeeID, t.SessionID) 
    WHEN NOT MATCHED BY SOURCE THEN 
     DELETE 
; 
관련 문제