我有一个有案例条件的工作程序。每次插入时都会触发它并检查一列中的特定值,然后更新另一列。整个SP的情况介于20-30之间。
我正在从MySQL迁移到PostgreSQL,想知道是否可以自动化它并选择内部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

最佳答案

是,可以使用子查询:

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

LIMIT是保证子查询返回一行的方便方法。

关于sql - sql条件条件作为从另一个表的SELECT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50748207/

10-11 17:29