SQL WHERE子句中字段的IF ELSE逻辑:current_owner为空时匹配createdBy
你的原写法存在两个核心问题:
- SQL中判断空值不能使用
== null语法,必须使用IS NULL,NULL和任意值做相等比较的结果都是UNKNOWN,会导致条件无法匹配 - 不同数据库的分支判断语法有差异,你可以根据实际使用的数据库选择下面的实现方案:
- 通用全数据库兼容方案(支持MySQL、PostgreSQL、Oracle、SQL Server等所有主流关系型数据库):使用CASE WHEN分支
SELECT * FROM wns WHERE CASE WHEN current_owner IS NULL THEN createdBy = ? ELSE current_owner = ? END;
说明:两个占位符?需要传入同一个目标值即可
- MySQL专属简化方案:使用IF函数
SELECT * FROM wns WHERE IF(current_owner IS NULL, createdBy = ?, current_owner = ?);
- 最简洁通用方案:使用COALESCE函数(支持所有主流数据库,仅需传1个参数)
SELECT * FROM wns WHERE COALESCE(current_owner, createdBy) = ?;
说明:COALESCE函数会返回参数列表中第一个非空的值,当current_owner为NULL时自动取createdBy的值做匹配,完全符合你的业务逻辑
内容的提问来源于stack exchange,提问作者Rajan Balodi
相关产品推荐
相关产品推荐

