我有两个数据表:
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
答案 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