我是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
速度要快得多,但是在个人具有多个特征的情况下它不起作用,除了最后一个特征以外都被覆盖。
无论如何,如果有人有任何建议会很棒!我觉得这种任务应该很常见,希望有人有巧妙的方式去做...
谢谢!
答案 0 :(得分:3)
你所拥有的是一种标准的多对多关系。您需要一个人员表,一个可能的特征表,然后是一个中间连接器表。连接器表包含两列。一个是人的主键,第二个是特征的主键。