2017-02-23 12 views
-1

他の2つのテーブルの列データを使用して新しい結合テーブルにデータを挿入する方法を理解しようとしていました。これは最初は単純だったように見えましたが、すぐには分かりませんでした。2つ以上の他のテーブルの列データを結合するSQLを使用してテーブルを作成

例: 私が持っているtProfilesテーブル:tProfiles

prof_id 

1 
2 
3 
4 
5 
... 

やテーブル含む役割tRole tRole

roleid 
1 
2 
3 
4 
5 
6 
7 
... 

と新しいtRoleByProfileから

選択roleidから

選択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を参照してください。

私の新しい結合テーブルは、結合された2つのテーブルから必要な正確なデータを持っています。両方のテーブルからのレコードのすべての組み合わせを組み込んだ結果セットをもたらすであろう任意の条件なしで2つのテーブルを結合

0

あなたはおそらく行っている可能性...

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

。言い換えれば、すべてのプロファイルがすべての役割を受け取ります。デカルトに含まれるものの行フィルタリングする

ジョイン(すなわち、NO関係に参加である)、のように、別々の選択それらを行うことで、上記結合の両側をフィルタリング...

+0

INSERT INTO tRoleByProfile SELECT r.RoleId, p.prof_id FROM tRole r JOIN (SELECT prof_id FROM tProfiles WHERE blah...) 
ロドニー私の質問にはそれを追加したすべての組み合わせが含まれているわけではありません。下記を参照してください。私はこれをテストしました...別のものがなければ、すべての行が得られますが、別個のものでは、私は正確なユニークな結果を得ました。重複などを挿入しないでください – user3663214

+0

あなたのコメントを再読み込みした後、あなたの答えを誤って解釈しました。あなたのソリューションは良く見え、ソリューションに感謝します。なぜ私はdownvoteを得ているのかわからない。これは簡単な問題の単純な解決策のように思えますが、私は悲しいことに無回答を見つけるためにしばらくの間、インターウェブとstackoverflowを精査しました。従ってこのポスト。私はこれがうまくいくことを証明し、効率的で重複を避けています...とにかく。 – user3663214

関連する問題