Как мне найти значение в таблице и вставить результат поиска в ту же таблицу? - PullRequest
1 голос
/ 05 августа 2011

Я создал таблицу из файла CSV.Хотя таблица содержит все данные, которые нам могут понадобиться для этого проекта, результирующая таблица не нормализована.Моя задача - очистить и нормализовать эту таблицу.

  1. Учитывая значение поля Value1 из TableA, как мне найти это значение в TableB и поместить PK из TableB в столбец FK в TableA?

  2. То же, что и исключение Вопроса 1 Мне нужно найти несколько столбцов.С учетом значений полей Value1 и Value2 из TableA, как мне найти эту комбинацию в TableB и поместить PK из TableB в столбец FK в TableA?

Ответы [ 4 ]

3 голосов
/ 05 августа 2011

Это должно работать для # 1:

UPDATE TableA
SET FKColumn = b.PKColumn
FROM TableA as a
INNER JOIN TableB as b
ON a.Value1 = b.Value1

Для № 2:

UPDATE TableA
SET FKColumn = b.PKColumn
FROM TableA as a
INNER JOIN TableB as b
ON a.Value1 = b.Value1 AND a.Value2 = b.Value2
0 голосов
/ 05 августа 2011

Логически, это должно быть примерно так:

UPDATE TableA
   SET FK_col = 
       (SELECT PK_col
          FROM TableB
         WHERE TableB.TableA_field = TableA.field)
 WHERE <your filter criteria on TableA>

Однако, по крайней мере, в MySQL, вы не можете напрямую ссылаться на TableA в подобных подзапросах в некоторых случаях, но это может быть сработановокруг по-разному в зависимости от обстоятельств.Я не уверен, относится ли это к SQL Server или нет - никогда не трогал его.

Редактировать: я думаю, что другие ответы, опубликованные в то же время, вероятно, лучше, чем мой!;)

0 голосов
/ 05 августа 2011
UPDATE TableA a 
SET a.fk_col = (select b.pk_col 
                from TableB b 
                where b.value = a.value);

А

UPDATE TableA a 
SET a.fk_col = (select b.pk_col 
                from TableB b 
                where b.value = a.value1 
                and b.value = a.value2);
0 голосов
/ 05 августа 2011
UPDATE TableA SET FKColumn = TableB.PKColumn
FROM TableB
WHERE TableA.Value1 = TableB.Value1

UPDATE TableA SET FKColumn = TableB.PKColumn
FROM TableB
WHERE TableA.Value1 = TableB.Value1 AND TableA.Value2 = TableB.Value2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...