2017-02-23 10 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和所有角色的所有角色從tProfiles使用這樣的插入prof_id: 插入到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; 

連接兩個表沒有任何條件將產生合併的兩個表中的記錄每一個組合的結果集。換句話說,每個配置文件都會收到每個角色。

要篩選包括在笛卡爾哪些行連接(即沒有關係的連接),通過使它們單獨的選擇過濾的上面的JOIN任一側,如在...

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

相關問題