English 中文(简体)
合并数据表列
原标题:
  • 时间: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)。我无法使用连接服务器,因为速度不够快,你有什么建议我可以通过编程实现吗?谢谢。

问题回答

我打算试着在之前两个答案的基础上补充,希望能让您更清楚,如果不是的话。Stingy和Menace想知道为什么您提到的两张桌子看起来不像这样:

Person
PersonID (primary key)
FirstName
LastName
Age

Demographics
DemographicsID (primary key)
PersonID (foreign key)
Autos
Kids

如果这两个表格看起来像这样,那么您可以通过向人员表添加几列来将它们合并成这样:

Person
PersonID (primary key)
FirstName
LastName
Age
Autos
Kids

然后执行像这样的查询:

UPDATE Person p, Demographics d
SET
  p.Autos = d.Autos
  p.Kids = d.Kids
WHERE
  p.PersonID = d.PersonID

在上面的示例中,如果人员表和人口统计表中都没有PersonID字段,我们就不知道每个人员记录对应的人口统计记录。你需要知道这一点才能创建联合表。

合并仅会组合具有相似模式的表的数据。

你可能需要遍历每个表格并创建一个第三张表格,其中包含你想要的所有列。

此外,我在这里看不到任何关系键。如果你有了它,你可以建立一个数据关系,甚至不需要合并它们。

这些表格之间如何相关?它们之间的关键是什么?(Zhèxiē biǎogé zhījiān rúhé xiāngguān? Tāmen zhījiān de guānjiàn shì shénme?)

select * from table1 t1
join table2 t2 on  <some magic where clause here>

如果想要加入这两个数据表 - Table1(姓名,年龄)和Table2(汽车,孩子)而不考虑列之间的连接,则我会更倾向于使用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

如果你想增加类型安全性,可以玩弄这些类型并进行合并。





相关问题
热门标签