Как обновить таблицы в SQL, чтобы соответствующие строки соответствовали? - PullRequest
1 голос
/ 12 июня 2009

Предположим, у меня есть 2 таблицы

Table1
ID Path
-- ---- 
1  PathA
2  PathB
3  PathC
4  PathD

Table2
ID Path  Table1ID
-- ----  --------
23 PathA 1
24 PathX 2
25 PathC 3
26 PathZ 4

В приведенном выше примере PathX должен быть PathB, а PathZ должен быть PathD

Как мне синхронизировать все значения пути в Таблице 2 со значениями в Таблице 1, таблицы могут быть большими, поэтому хотелось бы проверить все значения, которые не совпадают, и обновить их. Приветствия

Использование MS SQL Server 2005

Ответы [ 5 ]

1 голос
/ 12 июня 2009

Вот что я считаю самым простым:

 UPDATE TableB SET Path = TableA.Path 
 FROM TableA
 WHERE TableB.Id = TableA.ID AND TableB.Path <> TableA.Path
1 голос
/ 12 июня 2009

Полагаю, это должно сработать ...

UPDATE Table2 SET
    Path = t1.Path
FROM Table2 t2
INNER JOIN Table1 t1 ON
    t1.ID = t2.Table2ID
WHERE
    t1.Path != t2.Path;

Редактировать: Извините, мне кажется, я неверно истолковал ваш запрос. Я думал, что вы хотите, чтобы значения Table2 в Table1. Я изменил это, чтобы быть наоборот.

0 голосов
/ 12 июня 2009

Лучший способ

UPDATE TableB SET Path = TableA.Path 
 FROM TableA
 WHERE TableB.Id = TableA.ID AND TableB.Path <> TableA.Path
0 голосов
/ 12 июня 2009

Ваш пример демонстрирует, как вы можете (будете) получать аномалии, если вы не нормализуете свои таблицы.

В Table2 либо хранится Table1ID или Path, но не оба, вы можете запросить другой (возможно, воссоздайте вашу текущую Table2 как VIEW. Какой бы столбец вы ни выбрали для Table2, убедитесь, что у вас есть внешний ключ, ссылающийся на Table1.

0 голосов
/ 12 июня 2009

Если я правильно понимаю ваш вопрос, это обновит пути в таблице2 значениями из таблицы1

Update Table2
    set path = b.path
    From Table2 a
    Left outer join Table1 b
    on a.Table1ID = b.ID
    Where ltrim(rtrim(a.Path)) <> ltrim(rtrim(b.Path))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...