在SQL中更新许多类似列的有效方法?

时间:2010-11-11 23:36:04

标签: sql-server-2005 binary performance

我是SQL的新手,所以请耐心等待:)我有一群人和大约60个左右的可能特征,让我们称之为x1,x2,...,x60。对于每个人,可以应用这些特征中的一个,多个或不应用。此信息存储在表格中:

TABLE1:
ID  C
1   x1
1   x2
1   x6
2   x3
2   x7
3   x2
4   x2   
4   x5
4   x6
4   x8
...

我想使用60列的比特来表示这些信息,其中1表示存在特征,0表示不存在。

TABLE2:
ID  x1  x2  x3  x4  x5  x6 x7  x8 ...
1   1   1   0   0   0   1  0   0
2   0   0   1   0   0   0  1   0
3   0   1   0   0   0   0  0   0
4   0   1   0   0   1   1  0   1

逐一更新列非常繁琐,即重复

update table2 set table2.x1 = 1
from  table1 
where table1.C = 'x1'

每个xi的60次。它运行得很慢。

我在考虑做类似

的事情
update table2 
set table2.x1 = case table1.C when 'x1' then 1 else 0 end,
set table2.x2 = case table1.C when 'x2' then 1 else 0 end,
...
from table1

速度要快得多,但是在个人具有多个特征的情况下它不起作用,除了最后一个特征以外都被覆盖。

无论如何,如果有人有任何建议会很棒!我觉得这种任务应该很常见,希望有人有巧妙的方式去做...

谢谢!

1 个答案:

答案 0 :(得分:3)

你所拥有的是一种标准的多对多关系。您需要一个人员表,一个可能的特征表,然后是一个中间连接器表。连接器表包含两列。一个是人的主键,第二个是特征的主键。