如何将两个DataTable与内部联接一起加入

时间:2015-05-24 23:29:18

标签: c# mysql sql-server join

所以我想将2个数据表合并为1,就像在sql server中与内部联接合并一样。

一个问题是两个表中的某些字段名称相同,但值可能不同(例如,定价值)。这些表格都有一列ID'具有相同价值且可以加入。

5 个答案:

答案 0 :(得分:3)

你可以这样做,假设table1和table2是你的两个数据表,而resultTable是你希望用连接结果填充的DataTable。 您也可以使用union all运算符。

答案 1 :(得分:1)

使用JOIN编写引用两个数据库中的表的SQL SELECT语句,为查询中的表分配别名,然后使用别名限定列引用。

在SELECT列表中使用适当的表达式返回要返回的结果集。

模仿"全外"加入时,您可能需要使用带有LEFT JOIN的查询和带有ant-join的其他查询,并将结果与​​UNION ALL运算符结合使用。

一旦有了返回所需结果的SELECT,就可以在INSERT .. SELECT语句中使用它将结果保存到另一个表中。

除了对您要实现的目标的模糊描述之外,没有更具体的信息,我们可以尽可能具体。

答案 2 :(得分:1)

 DataTable dt1 = new DataTable();
    dt1.Columns.Add("CustID", typeof(int));
    dt1.Columns.Add("ColX", typeof(int));
    dt1.Columns.Add("ColY", typeof(int));

    DataTable dt2 = new DataTable();
    dt2.Columns.Add("CustID", typeof(int));
    dt2.Columns.Add("ColZ", typeof(int));

    for (int i = 1; i <= 5; i++)
    {
        DataRow row = dt1.NewRow();
        row["CustID"] = i;
        row["ColX"] = 10 + i;
        row["ColY"] = 20 + i;
        dt1.Rows.Add(row);

        row = dt2.NewRow();
        row["CustID"] = i;
        row["ColZ"] = 30 + i;
        dt2.Rows.Add(row);
    }

    var results = from table1 in dt1.AsEnumerable()
                 join table2 in dt2.AsEnumerable() on (int)table1["CustID"] equals (int)table2["CustID"]
                 select new
                 {
                     CustID = (int)table1["CustID"],
                     ColX = (int)table1["ColX"],
                     ColY = (int)table1["ColY"],
                     ColZ = (int)table2["ColZ"]
                 };
    foreach (var item in results)
    {
        Console.WriteLine(String.Format("ID = {0}, ColX = {1}, ColY = {2}, ColZ = {3}", item.CustID, item.ColX, item.ColY, item.ColZ));
    }
    Console.ReadLine();

// Output:
// ID = 1, ColX = 11, ColY = 21, ColZ = 31
// ID = 2, ColX = 12, ColY = 22, ColZ = 32
// ID = 3, ColX = 13, ColY = 23, ColZ = 33
// ID = 4, ColX = 14, ColY = 24, ColZ = 34
// ID = 5, ColX = 15, ColY = 25, ColZ = 35

答案 3 :(得分:1)

编写SQL SELECT语句,引用两个数据库中的表,使用JOIN,为查询中的表分配别名,然后使用别名限定列引用。

在SELECT列表中使用适当的表达式返回要返回的结果集。

答案 4 :(得分:0)

您应该能够这样做,假设table1table2是您的两个数据表,而resultTableDataTable您希望填充的结果加入:

var res = from dr1 in table1.AsEnumerable()
            join dr2 in table2.AsEnumerable()
              on dr1.Field<int>("ID") equals dr2.Field<int>("ID")
          select resultTable.LoadDataRow(new object[]
          {
            dr1.Field<int>("ID"),
            dr1.Field<string>("column name .. "),
            ... 
            dr2.Field<string>("column from table 2 .. "),
            ...
           }, false);
然后,

resultTable将填充包含您在选择中选择的字段的行。