Случай SQL как SELECT из другой таблицы - PullRequest
0 голосов
/ 07 июня 2018

У меня рабочая процедура с условиями дела.Он запускается при каждой вставке и проверяет конкретные значения в одном столбце, а затем обновляет другой столбец.Весь SP имеет от 20 до 30 CASE условий.Я перехожу с MySQL на PostgreSQL, и мне было интересно, можно ли его автоматизировать и иметь SELECT внутри CASE?(см. код ниже)

SELECT col1,col2 FORM myCASEtbl
ABC | 1
DEF | 2
123 | 3

ОТ ЭТОГО:

UPDATE myTable
SET columnName = CASE
WHEN OtherColumn LIKE '%ABC%' THEN columnName = 1
WHEN OtherColumn LIKE '%DEF%' THEN columnName = 2
WHEN OtherColumn LIKE '%123%' THEN columnName = 4
...
ELSE columnName
END
WHERE columnName IS NULL;

ДО ЭТОГО:

UPDATE myTable
SET columnName = CASE
SELECT 'WHEN OtherColumn LIKE ' + col1 + ' THEN columnName = ' + col2 FROM myCASEtbl
ELSE columnName
END 
WHERE columnName IS NULL

1 Ответ

0 голосов
/ 07 июня 2018

Да, вы можете использовать подзапрос:

UPDATE myTable
    SET columnName = (SELECT ct.col2
                      FROM myCaseTable ct
                      WHERE mytable.OtherColumn like '%' || ct.col || '%'
                      LIMIT 1
                     )
    WHERE columnName IS NULL;

LIMIT - это удобный способ гарантировать, что подзапрос возвращает одну строку.

...