如何将多个表连接成一个

时间:2012-09-25 10:43:58

标签: c# sql database

如何将多个表合并为一个?

我有3个列名为Test 1, Test 2 and Test3

的数据表

Datatables获得了3行值。

我希望他们在一个数据表中,如下面的例子

TEST 1  |  TEST2  |  TEST 3

我已经尝试了合并函数dt1.merge(dt2),但它为每列添加了额外的3行。

该表适用于DataGridView

这是关于我如何从数据库中检索表的代码示例。

            string queryStatusTest =
               "SELECT status AS 'uppgift " + t +"' FROM b_personuppgift
                        WHERE uppgiftid IN(SELECT uppgiftid FROM b_uppgift
                                                   WHERE kursid = 'ABC123') "
                  + "AND uppgiftid=" + t + " ORDER BY uppgiftid";
            DataTable dTest = dataBase.Select(queryStatusTest);

database.Select()函数只返回一个表。

3 个答案:

答案 0 :(得分:0)

我想说数据库是指。您可以使用以下语句将所有3个表中的数据插入到一个表中:

INSERT INTO table_all(column1,column2,column3) 
VALUES( 
  (SELECT column1 FROM test1),
  (SELECT column1 FROM test2),
  (SELECT column1 FROM test3),
)

答案 1 :(得分:0)

此问题的最常见原因是您尚未在DataTables上设置主键。 Merge方法使用主键来匹配行。

MSDN中的Merge method documentation声明:

  

将新的源DataTable合并到目标中时,任何源行   DataRowState值为Unchanged,Modified或Deleted的是   匹配具有相同主键值的目标行。源行   DataRowState值为Added与新目标行匹配   与新源行相同的主键值。

答案 2 :(得分:0)

假设3列类型为字符串:

var mergeTable = dt1.AsEnumerable()
     .Concat(dt2.AsEnumerable())
     .Concat(dt3.AsEnumerable())
     .GroupBy(row => new { 
                        Test1 = row.Field<string>("Test1")
                        Test2 = row.Field<string>("Test2") 
                        Test3 = row.Field<string>("Test3") 
                        })

     .Select(g => g.First())
     .CopyToDataTable();