Замените оригинальные srids новыми - PullRequest
0 голосов
/ 16 июня 2011

Demo Tables

Как видите, у меня есть 2 таблицы: таблица 1 и таблица 2. Столбец srid в таблице 1 является столбцом идентификаторов.

Таблица 2 похожа на дочернюю таблицу таблицы 1, где мы можем связать таблицу 2 с таблицей 1, используя столбец srid .

Теперь то, чего я хотел бы добиться, - это заменить оригинальный srid , то есть 1,2,3, на новые, т.е. 4,5,6, в то время как в то же время мы сохраняем его оригинальная crvalue без изменений. И тогда мы вставим его обратно в таблицу 2.

Я считаю замену новых srids немного сложным и застрял. Так какой запрос / скрипт я должен написать для достижения этого?

Спасибо.

Ответы [ 2 ]

1 голос
/ 18 июня 2011

Вы можете попробовать что-то вроде этого:

WITH ranked AS (
  SELECT
    *,
    rank = ROW_NUMBER() OVER (PARTITION BY uid ORDER BY srid)
  FROM Table1
)
UPDATE t2
SET srid = new.srid
FROM Table2 t2
  INNER JOIN ranked old ON old.uid = 1 AND old.srid = t2.srid
  INNER JOIN ranked new ON new.uid = 2 AND new.rank = old.rank

По сути, вы ранжируете значения srid в каждой группе uid, а затем объединяете два поднабора по рангу, чтобы связать каждый старый srid с новым. Естественно, вы, конечно, тоже присоединяетесь к Table2 со старым подмножеством srid.

0 голосов
/ 16 июня 2011

на основе этого простого примера, я думаю, вы могли бы внутренне объединить таблицы, как это

... FROM Table1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ Table2 ON Table1.srid = Table2.srid + 3 ...

Затем вы вставите Table1.srid и Table2.crvalue в новую таблицу. Эти результаты должны вернуть вашу последнюю таблицу. Надеюсь, это поможет.

...