эффективный способ обновить много похожих столбцов в SQL? - PullRequest
2 голосов
/ 12 ноября 2010

Я немного новичок в 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'

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 Ответ

3 голосов
/ 12 ноября 2010

То, что у вас есть, это стандартное отношение «многие ко многим».Вы хотите таблицу людей, таблицу возможных характеристик, а затем среднюю таблицу соединителей.Таблица соединителей содержит два столбца.Один - это первичный ключ человека, а второй - первичный ключ характеристики.

...