代码之家  ›  专栏  ›  技术社区  ›  user779159

避免在postgres plpgsql函数中几乎重复查询

  •  0
  • user779159  · 技术社区  · 6 年前

    在plpgsql函数中编写这个查询是否比几乎复制查询两次更好?有什么办法可以说如果 valB 为空,则它应与 colB 从何处子句中删除?

    if (valB is not null) then
        update mytable set colA = valA where (colB, colC) = (valB, valC);
    else
        update mytable set colA = valA where (colC) = (valC);
    end if;
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   a_horse_with_no_name    6 年前

    您可以使用 OR 参数条件:

    update mytable 
       set colA = valA 
    where (valb is null and colC = valC)
       or (valb is not null and (colb, colc) = (valb, valc));
    
        2
  •  1
  •   Gordon Linoff    6 年前

    你可以用 or . 我会这样说:

    update mytable 
       set colA = valA 
    where colC = valC and
           (valb is null or colb = valb);