【问题标题】:How to update MySQL query with multiple where and set using or clause如何使用 or 子句使用多个 where 和 set 更新 MySQL 查询
【发布时间】:2024-01-24 12:32:01
【问题描述】:
Update table 
set col = replace(col, 'value1','') where col like '%value1%'
or set col = replace(col, 'value2','') where col like '%value2%' 
or set col = replace(col, 'value3','') where col like'%value3%';

【问题讨论】:

    标签: mysql sql sql-update where-clause sql-like


    【解决方案1】:

    您可以使用case 表达式:

    update table set col = case
        when col like '%value1%' then replace(col, 'value1', '')
        when col like '%value2%' then replace(col, 'value2', '')
        when col like '%value3%' then replace(col, 'value3', '')
        else col
    end
    

    您也可以按如下方式表达此查询 - 这 几乎 等同于上述查询,除非 col 包含,例如,'value1''value2'(在这种情况下两者都将被替换,而第一个查询将替换 'col1'):

    update table set col =
        replace(
            replace(
                replace(col, 'value1', ''),
                'value2', ''
            ),
            'value3', ''
        )
    

    此外,您可能希望在更新数据集之前对其进行过滤,尤其是在您的表包含大量行的情况下。您可以通过在查询中添加where 子句来做到这一点:

    where col like '%value1%' or col like '%value2%' or col like '%value3%'
    

    【讨论】:

    • 我希望如果 value1 则 case 1 应该只工作,如果 value 2 出现则只有 case 2。我可以使用 case 但我不能使用'或'
    • @rohinisharma:这就是case 所做的;它在第一个匹配条件处停止,应用相应的操作,并跳过以下操作。