【问题标题】: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
          

          如果您想以更高的类型安全性进行此合并,您可以使用类型。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-01-30
            • 2016-06-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-20
            • 1970-01-01
            • 2021-08-28
            相关资源
            最近更新 更多