2013-05-20 3 views
0

1:n 관계를 n:m 관계로 변경해야하는 데이터베이스 모델을 마이그레이션하려고합니다.SQL의 조인 테이블을 통해 새 요소를 만들고 부모 요소에 연결

데이터를 새 테이블에 넣고 INSERT해야하며이 과정에서 생성 된 ID을 사용하여 조인 테이블을 채 웁니다.

테이블은 PartsDocument이고 이들 사이의 조인 테이블은 PartDocument입니다.

part에 대해 documents (기본 유형/이름/설명 포함)을 두 개 만들고 조인 테이블을 통해 해당 part에 연결하고자합니다. 나는 2 * N documents을 쉽게 만들 수 있지만, 각각을 PartDocument 조인 테이블에 연결하는 방법을 찾는 데 어려움이 있습니다.

INSERT INTO Document (Type, Name, Description) 
SELECT 1, 'Work Instructions', 'Work Instructions' 
FROM Parts 
GO 

INSERT INTO Document (Type, Name, Description) 
SELECT 2, 'Drawing', 'Drawing' 
FROM Parts 
GO 

INSERT INTO PartDocument (PartID, DocumentID) 
????? 

PartDocument 가입 테이블 단지 복합 키로 함께 사용되는 두 개의 열, PartIDDocumentID을 가지고 있습니다.

원하는 결과는 각 파트에 대해 두 개의 문서가 있고 각 문서가 조인 테이블을 통해 해당 파트와 연결된다는 것입니다.

나는 복잡한 요소는 마지막 선택에서 INNER JOIN에서 ON 부분 http://sqlfiddle.com/#!6/b51f0

답변

1

내가 끝낸 것은 문서 테이블을 만들 때 임시 PartID 열을 추가하는 것이 었습니다. 그런 다음 문서를 만들고 연결 한 후에이 열을 삭제할 수 있습니다.

그래서 기본적으로이 다음 INSERT SELECT는 모든 부분에 대한 1 문서를 만드는

INSERT INTO Document (Type, Name, Description, PartID) 
SELECT 1, 'Work Instructions', 'Work Instructions', Part.ID 
FROM Part 
GO 

INSERT INTO PartDocument 
SELECT Document.PartID, Document.ID 
FROM Document 
GO 

ALTER TABLE Document 
DROP COLUMN PartID 
GO 
+0

당신은 대답을 올바른 것으로 표시해야합니다 (숫자 아래에 고리가 있음). –

+0

@Angelo Neuschitzer 그것은 내 자신의 질문에 답하기 위해 기다렸다가 받아 들일 시간이 더 길어졌습니다. XD 도움 btw 주셔서 감사합니다. :) – hashtable

0
INSERT INTO Document (Type, Name, Description) 
SELECT 1, 'Work Instructions', 'Work Instructions' 
FROM Parts 
GO 

INSERT INTO Document (Type, Name, Description) 
SELECT 2, 'Drawing', 'Drawing' 
FROM Parts 
GO 

INSERT INTO PartDocument (PartID, DocumentID) 
SELECT part.id, document.id 
FROM Parts part 
INNER JOIN Document document ON part.field1 = document.field1 
GO 

SQL 서버 익스프레스 2012을 사용하고 있습니다. 방금 만든 선을 그들이 출현 한 부품 요소와 함께 선택해야합니다.

+0

. 두 인서트를 모두 실행 한 후에 두 부분으로 된 문서가 두 배가됩니다. 문서 ID는 자동 생성되며 PartID는 알 수 없습니다. 데이터베이스에서 그려지고 있습니다. 나는 이것이 내가 찾고있는 것을하고 있다고 생각하지 않는다. xD – hashtable

+0

@hashtable 원한다면 크로스 조인 테이블이 없어야합니다. 문서에 PartID가있는 것이 좋습니다. (또는 문서를 둘 이상의 파트에 연결할 수 있습니까?) –

+0

새 버전의 데이터베이스에서 문서를 둘 이상의 파트에 연결할 수 있습니다. (구 버전에서는 불가능했습니다). 이는 이전 데이터를 다시 형식화하여 새 데이터베이스 모델로 마이그레이션하는 스크립트의 일부입니다. 이 링크를 얻은 후에는이 "문서"자리 표시자를 가리키는 DocumentVersions를 만들 것입니다. 그래서 네, 조인 테이블을 원합니다. xD – hashtable

관련 문제