2016-03-27 2 views
0

У меня есть две таблицы Table1 и Table2, каждая с двумя столбцами: Id, Name.Заполните значения таблицы во внешнем ключе

Таблицы заполнены некоторыми данными. Я хочу создать новую таблицу со столбцами: Id, T1_Id, T2_Id, где T1_Id и T2_Id являются иностранными ключами до Table1 и Table2 соответственно.

Как создать таблицу как можно быстрее, чтобы заполнить его со всеми значениями и T1_Id, T2_Id уже содержащихся в таблицах Table1 и TABLE2?

Например:

Таблица 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

Добро пожаловать в StackOverflow: если вы разместите код, XML или данных образцов, пожалуйста ** ** выделить те строки в текстовом редакторе и нажмите на «образцы кода» кнопки ('{ } ') на панели инструментов редактора, чтобы красиво форматировать и синтаксис выделить его! –

ответ

1

Вы бы использовать cross join:

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; 

Первая версия быстрее, потому что вторая на самом деле сделает вид.

+0

Результаты не являются таблицей, а всего лишь двухмерным массивом. – jdweng

2

Использование CROSS JOIN получить декартово произведение Table 1 и Table 3.

Попробуйте

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

Попробуйте

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") }); 
       } 
      } 

     } 
    } 
} 
Смежные вопросы