2017-02-23 3 views
-1

다른 두 테이블의 열 데이터를 사용하여 새 조인 테이블에 데이터를 삽입하는 방법을 알아 내려고했습니다. 이것은 처음에는 단순한 것 같았지만 지금 당장은 해결책이 어디에도 없습니다.두 개 이상의 다른 테이블의 SQL 결합 열 데이터를 사용하여 테이블 만들기

예 : 내가 가진 tProfiles 테이블 : tProfiles

prof_id 

1 
2 
3 
4 
5 
... 

및 테이블 포함하는 역할 tRole tRole

roleid 
1 
2 
3 
4 
5 
6 
7 
... 

새로운 tRoleByProfile에서

선택 역할 ID에서

선택 prof_id tRole과 all의 모든 역할이 필요합니다. tRoleByProfile (RoleId, ProfileId)에 삽입

답변

0

이제는 이와 같은 활성 사용자가있는 프로필을 얻으려면 여기에 여러 조인을하고 있습니다.

insert into tRoleByProfile(RoleId, ProfileId) 
select distinct r.RoleId, p.prof_id from tRole r, tProfiles p 
inner join tUserRoles ur on p.PROF_ID = ur.prof_id 
inner join tUsers u on u.user_id = ur.user_id 
inner join tUserLogins ul on ul.user_id = u.user_id 
where u.user_inactive_flg = 'N' 

전체 가입시 고유해야합니다. Distinct를 사용하지 않으면 중복 데이터가 많이 생성됩니다. 전체 참여에 대한 자세한 내용은 http://www.informit.com/articles/article.aspx?p=30875&seqNum=5을 참조하십시오.

이제 새 조인 테이블에 결합 된 두 테이블에서 필요한 정확한 데이터가 있습니다. 두 테이블에서 레코드의 모든 조합을 통합하는 결과 집합을 얻을 것입니다 어떤 조건없이 두 개의 테이블을 조인

0

당신이 가능하게 할 수 있었다 ...

INSERT INTO tRoleByProfile 
    SELECT r.RoleId, p.prof_id 
    FROM tRole r 
    JOIN tProfiles p; 

. 즉, 모든 프로필은 모든 역할을 받게됩니다.

가있는 ...

INSERT INTO tRoleByProfile 
SELECT r.RoleId, p.prof_id 
FROM tRole r 
JOIN (SELECT prof_id 
     FROM tProfiles 
     WHERE blah...) 
+0

로드니로서, 그 별도 선택함으로써 가입 상기 양쪽 필터 (즉, 무 관계 조인) 가입 직교 포함하는지 행 필터링하려면 내가 뚜렷한 것을 추가하면 내 쿼리에는 모든 조합이 포함되지 않습니다 ... 아래를 참조하십시오. 나는 이것을 시험해 보았다. 별다른 문제없이 가능한 모든 행을 얻었지만 별개의 것으로서 나는 독특한 결과를 얻었다. 중복 등을 삽입하지 마십시오. – user3663214

+0

귀하의 코멘트를 다시 읽은 후에 귀하의 대답을 잘못 해석했습니다. 솔루션이 좋게 보이고 솔루션에 감사드립니다. 왜 내가 downvote를 받고 있는지 모르겠다. 이것은 단순한 문제에 대한 간단한 해결책처럼 보이지만 슬프게도 아무런 대답도 찾을 수 없기 때문에 꽤 자주 interweb과 stackoverflow를 훑어 보았습니다. 따라서이 게시물. 나는이 작품을 증명하고 효율적이며 중복을 피한다 ... 어쨌든. – user3663214

관련 문제