2016-03-27 22 views
0

私は2つのテーブルとTable2を持っています。それぞれ2つのカラム:Id, Nameがあります。外部キーのテーブル値を入力してください

テーブルにはいくつかのデータが入っています。 Id, T1_Id, T2_Idという新しいテーブルを作成したいと考えています。T1_IdT2_IdはそれぞれTable1Table2の外部キーです。

はどのよう T1_Idは、 T2_Idはすでにテーブル表1と表2に含まれるすべての値とし、それを埋めるために、可能な限り迅速としてテーブル を作成するには?例えば

表1:

Id  Name 
1  T1N1 
2  T1N2 
3  T1N3 

表2:

Id  Name 
1  T2N1 
2  T2N2 

結果テーブル

Id T1_Id T2_Id 
1  1  1 
2  2  1 
3  3  1 
4  1  2 
5  2  2 
6  3  2 
+0

ようこそ試してみてください:あなたは、コード、XMLまたはデータサンプルを投稿する場合は、** **テキストエディタでそれらの行をハイライト表示し、「コードサンプル」ボタンをクリックしてくださいを( '{ } ')をエディタのツールバーに表示して、書式を整えて構文をハイライト表示します! –

答えて

1

をお試しください:

select row_number() over (order by (select null)) as id, 
     t1.id as t1_id, t2.id as t2_id 
into result 
from table1 t1 cross join table2 t2; 

これはあなたが実際に結果表のid列の順序を気にしないことを前提としています。そうであれば、次のようにすることができます:

select row_number() over (order by t1.id, t2.id) as id, 
     t1.id as t1_id, t2.id as t2_id 
into result 
from table1 t1 cross join table2 t2; 

第2版は実際にソートを行うので、第1版は高速です。

+0

結果はテーブルではなく、2次元配列です。 – jdweng

2

Table 1Table 3のデカルト積を取得するにはCROSS JOINを使用してください。

はあなたがcross joinを使用することになり、この

select row_number() over(order by T2_Id,T1_Id) as Id, 
     T1_Id , 
     T2_Id 
From [Table 1] A 
CROSS JOIN [Table 3] B 
-1

にStackOverflowにこの

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      DataTable dt1 = new DataTable(); 
      dt1.Columns.Add("Id", typeof(int)); 
      dt1.Columns.Add("Name", typeof(string)); 

      dt1.Rows.Add(new object[] {1, "T1N1"}); 
      dt1.Rows.Add(new object[] {2, "T1N2"}); 
      dt1.Rows.Add(new object[] {3, "T1N3"}); 


      DataTable dt3 = new DataTable(); 
      dt3.Columns.Add("Id", typeof(int)); 
      dt3.Columns.Add("Name", typeof(string)); 

      dt3.Rows.Add(new object[] {1, "T2N1"}); 
      dt3.Rows.Add(new object[] {2, "T2N2"}); 

      DataTable results = new DataTable(); 
      results.Columns.Add("Id", typeof(int)); 
      results.Columns.Add("T1_Id", typeof(int)); 
      results.Columns.Add("T2_Id", typeof(int)); 

      int id = 1; 
      foreach (DataRow row3 in dt3.AsEnumerable()) 
      { 
       foreach (DataRow row1 in dt1.AsEnumerable()) 
       { 
        results.Rows.Add(new object[] { id++, row3.Field<int>("Id"), row1.Field<int>("Id") }); 
       } 
      } 

     } 
    } 
}