比较两个数据集并在第一个数据集中添加coulm(如果存在于第二个数据集中)

时间:2015-05-11 06:53:11

标签: c# sql-server sql-server-2008

我有两个数据表:

table1:
id value label
1  val1  lbl1   
2  val2  lbl2 

table2:
id value label
1  val1  lbl1  

我想比较两个数据表,并在第一个表格中添加一个列,然后分配' =' true'如果它存在于table2中则为false。

我该怎么做?在c#或TSQL中都可以提供帮助。

所以我期望的最终结果是:

    id value label assigned
    1  val1  lbl1   true
    2  val2  lbl2   false

这里因为id = 1存在于两个表中,所以它被标记为已分配且id = 2,它仅出现在table1中而不出现在table2中,然后在指定列中标记为false。

修改 我有两个单独的选择查询来获取table1和table2数据: 这是我的疑问: 的 QUERY1:

select Id,label,Values from 
t1 inner join t2 
on ID=t2.UDF1ValueID inner join t3
on t2.UDFID = t3.UDF_ID
where ID=15

QUERY2

select Id,label,Values from t4 w
inner join t2 on(w.Id=t2.Id)
 inner join t3 on (t3.ID=t2.ID) 
 inner join t4 on (t3.ID=t4.ID)
  where w_Id=5 and t2.ID=15

3 个答案:

答案 0 :(得分:2)

您可以使用LEFT JOIN CASE声明:

的组合-- Sample Data WITH table1(id, value, label) AS( SELECT 1, 'val1', 'lbl1' UNION ALL SELECT 2, 'val2', 'lbl2' ), table2(id, value, label) AS( SELECT 1, 'val1', 'lbl1' ) -- Solution SELECT t1.*, assigned = CASE WHEN t2.id IS NOT NULL THEN 1 ELSE 0 END FROM table1 t1 LEFT JOIN table2 t2 ON t2.id = t1.id 来执行此操作
static interface Signal {};
enum Cancel implements Signal { Instance; };
enum Subscribe implements Signal { Instance; };
enum Send implements Signal { Instance; };

答案 1 :(得分:2)

declare @t table (Id int,val varchar(10),label varchar(10))
insert into @t (id,val,label)values(1,'val1','lbl1'),(2,'val2','lbl2')

declare @tt table (Id int,val varchar(10),label varchar(10))
insert into @tt (id,val,label)values(1,'val1','lbl1')


select tt.id,tt.val,tt.label,CASE WHEN  ttt.Id IS NOT NULL THEN 'TRUE' ELSE 'FALSE' END 'Assigned'
 from @t tt INNER JOIN @tt ttt ON tt.Id = ttt.Id 

OR

 select tt.id,tt.val,tt.label,CASE WHEN  tt.Id IS NOT NULL THEN 'TRUE' ELSE 'FALSE' END 'Assigned'
 from @t tt  where exists (select 1 from @tt t where t.Id = tt.Id) 

答案 2 :(得分:2)

C#做的方式。

  

请注意,此处的代码只处理架构,而不处理数据。

DataTable t1;
DataTable t2;

foreach( DataColumn c in t1.Columns)
{           
    if(!t2.Columns.Contains(c.ColumnName))
    {
        t2.Columns.Add(new DataColumn(c.ColumnName,c.DataType));
    }
}

可以找到工作样本here