【问题标题】:Merge Datatable columns合并数据表列
【发布时间】:2009-02-03 16:18:02
【问题描述】:
您好,我有两个数据表说:
表 1:
name age
---- ---
Bob 40
表 2:
auto kids
---- ----
3 3
我想合并这两个表来得到类似的东西
name age auto kids
--- --- --- ----
Bob 40 3 3
这可能吗?我尝试了合并,但它似乎不起作用,谢谢。
我不能做你们建议的原因是因为这两个数据来自两个不同的数据库(Oracle、SQL)。我不能使用链接服务器,因为速度不存在,您可以向我建议我可以以编程方式执行的操作吗?谢谢。
【问题讨论】:
标签:
.net
asp.net
merge
datatable
【解决方案1】:
我将尝试在前两个答案的基础上进行补充,以期让您更清楚,以防万一。什么 Stingy 和 Menace 想知道为什么你说的两张桌子看起来不像这样:
人
PersonID(主键)
名字
姓
年龄
人口统计
DemographicsID(主键)
PersonID(外键)
汽车
儿童
...如果这两个表看起来像这样,那么您可以通过在 person 表中添加几列来组合它们,使其看起来像这样:
人
PersonID(主键)
名字
姓
年龄
汽车
孩子们
...然后执行如下查询:
更新个人 p,人口统计 d
套装
p.Autos = d.Autos
p.Kids = d.Kids
在哪里
p.PersonID = d.PersonID
在上面的示例中,如果没有 Person 和 Demographics 表中的 PersonID 字段,我们不知道哪个 Demographic 记录与每个 Person 记录相关联。您需要知道这一点才能创建组合表。
【解决方案2】:
Merge 只会合并具有相似架构的表的数据。
您可能必须遍历每个表并创建一个包含所有您想要的列的第三个表。
另外,我在这里看不到任何类型的关系键。如果你有这个,你可以建立一个数据关系,甚至不需要合并它们。
【解决方案3】:
这些表是如何关联的?他们之间的关键是什么
select * from table1 t1
join table2 t2 on <some magic where clause here>
【解决方案4】:
如果您想加入这两个数据表 - Table1(name,age) 和 Table2(auto,kids) 而不管列之间的任何连接,那么我更喜欢使用 Linq。在 Linq 中,您可以使用表格的“rowIndex”连接两个或多个表格。
试试下面的 VB.NET 代码:
Dim Table1, Table2, MergerTable As New DataTable
Dim rs = From c In Table1.AsEnumerable()
Join c1 In Table2.AsEnumerable() On Table1.Rows.IndexOf(c) Equals LicensDatum.Rows.IndexOf(c1)
Select New With
{
.a0 = c.Item(0),
.b0 = c.Item(0),
.a1 = c.Item(0),
.b1 = c1.Item(0)
}
MergerTable = New DataTable()
MergerTable.Columns.Add("name", GetType(String))
MergerTable.Columns.Add("age", GetType(String))
MergerTable.Columns.Add("auto", GetType(String))
MergerTable.Columns.Add("kid", GetType(String))
For Each row In rs.ToList()
Dim tableRow = MergerTable.NewRow()
tableRow.Item("name") = row.a0
tableRow.Item("age") = row.b0
tableRow.Item("auto") = row.a1
tableRow.Item("kid") = row.b1
MergerTable.Rows.Add(tableRow)
Next
如果您想以更高的类型安全性进行此合并,您可以使用类型。