2010-11-11 11 views
2

Je suis un peu nouveau à SQL, alors s'il vous plaît gardez avec moi :) J'ai une population de personnes et environ 60 caractéristiques possibles, appelons-les x1, x2, ..., x60. Pour chaque personne, une, plusieurs ou aucune de ces caractéristiques peuvent s'appliquer. Ces informations sont stockées dans une table:moyen efficace de mettre à jour de nombreuses colonnes similaires dans SQL?

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

Je veux représenter cette information en utilisant 60 colonnes de bits, où 1 signifie que la caractéristique est présente, et 0 signifie non.

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 

il est vraiment fastidieux de mettre à jour les colonnes un par un, à savoir répéter

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

60 fois pour chacun les xi. Et ça fonctionne vraiment lentement.

Je pensais faire quelque chose comme

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 

qui est beaucoup plus rapide, mais il ne fonctionne pas dans le cas où une personne a plusieurs caractéristiques, tous sauf le dernier sont remplacés.

De toute façon, si quelqu'un a des suggestions ce serait génial! Je me sens comme ce genre de tâche devrait être assez commun et j'espère que quelqu'un a une façon ingénieuse de s'y prendre ...

Merci!

Répondre

3

Ce que vous avez là est une relation standard plusieurs-à-plusieurs. Vous voulez une table de personnes, un tableau de caractéristiques possibles, puis une table de connecteur du milieu. La table de connecteur contient deux colonnes. L'un est la clé primaire de la personne et le second est la clé primaire de la caractéristique.

+0

Salut Jotn, merci beaucoup pour votre réponse. D'après ce que je comprends, en utilisant une table de connecteur peut faire des requêtes plus rapidement en utilisant un index. Cependant, j'ai toujours besoin de toutes les colonnes de binaires pour enregistrer les caractéristiques de chaque individu. Ce format est nécessaire pour le logiciel statistique que j'utilise plus tard. Savez-vous s'il existe un moyen de les mettre à jour sans copier/coller l'instruction de mise à jour? Merci! – mmsk