2017-02-23 12 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

相关问题