我有两个表Table1
和Table2
,每个表都有两列:Id, Name
。
表中填充了一些数据。我想创建一个包含以下列的新表:Id, T1_Id, T2_Id
,其中T1_Id
和T2_Id
分别是Table1
和Table2
的外键。
如何尽快创建表格 以填充表格1和表格2中已包含的所有值和T1_Id
,T2_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
答案 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 JOIN
和Table 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") });
}
}
}
}
}