Обновление таблицы на основе нескольких условий без использования CASE - PullRequest
0 голосов
/ 15 марта 2020

Мне нужно обновить таблицу на основе нескольких условий, и обновление должно быть выполнено в одном операторе обновления. Кроме того, ограничение заключается в том, что я НЕ МОГУ использовать следующую конструкцию из-за проблем с производительностью, поскольку в моем обновлении содержится около 18 выражений CASE:

UPDATE A
SET A.col1 = CASE WHEN B.col = someValue      THEN B.Col2 END,
    B.Col2 = CASE WHEN b.col = someOtherValue THEN B.Col2 END,
    .
    .
    --18th CASE stmt
    B.Col18 = CASE WHEN b.col = YetAnotherValue THEN B.Col2 END
FROM
    tableA A 
INNER JOIN
    tableB B ON A.someColumn = B.someColumn

Будем благодарны за любые предложения.

1 Ответ

0 голосов
/ 15 марта 2020

Я подозреваю, что вы действительно хотите агрегировать до обновления:

UPDATE A
    SET A.col1 = B.col1,
        B.Col2 = B.col2,
          . . .
    FROM tableA A JOIN
         (SELECT B.someColumn,
                 MAX(CASE WHEN B.col = someValue THEN B.Col2 END) as col1,
                 MAX(CASE WHEN b.col = someOtherValue THEN B.Col2 END) as col2,
                 . . .
          FROM tableB B
          GROUP BY B.someColumn
         ) B
         ON A.someColumn = B.someColumn
...