在外键中填写表值

时间:2016-03-27 12:09:52

标签: c# sql sql-server

我有两个表Table1Table2,每个表都有两列:Id, Name

表中填充了一些数据。我想创建一个包含以下列的新表:Id, T1_Id, T2_Id,其中T1_IdT2_Id分别是Table1Table2的外键。

如何尽快创建表格 以填充表格1和表格2中已包含的所有值和T1_IdT2_Id

例如:

表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

3 个答案:

答案 0 :(得分:2)

使用test = "AltERNating" def to_alternating_case(string): words = list(string) for word in words: if word.isupper() == True: return word.lower() else: return word.upper() print to_alternating_case(test) 获取CROSS JOINTable 1的笛卡尔积。

试试这个

Table 3

答案 1 :(得分: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;

第一个版本更快,因为第二个版本实际上会进行排序。

答案 2 :(得分:-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") });
                }
            }

        }
    }
}