news 2026/9/26 19:09:23

sql 如果字段为空就用另一个字段

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
sql 如果字段为空就用另一个字段

您可以使用COALESCE()函数或CASE WHEN表达式来处理这个逻辑:

方案一:使用COALESCE()函数(推荐)

SELECTbpi.batch_idASbatchId,bpi.batch_nameASbatchName,bpi.plate_nameASplateName,bpi.categoryASproductType,bpi.product_idASproductId,bpi.product_nameASproductName,bpi.opening_timeASopeningTime,bpi.section_idASsectionId,bpi.section_nameASsectionName,bpi.company_idAScompanyId,bpi.company_nameASsupplier,bpi.purchase_typeASpurchaseType,COALESCE(bpi.winning_bid_amount,bpi.bid_price)ASwinningBidAmountFROMbid_project_info bpi

方案二:使用CASE WHEN表达式

SELECTbpi.batch_idASbatchId,bpi.batch_nameASbatchName,bpi.plate_nameASplateName,bpi.categoryASproductType,bpi.product_idASproductId,bpi.product_nameASproductName,bpi.opening_timeASopeningTime,bpi.section_idASsectionId,bpi.section_nameASsectionName,bpi.company_idAScompanyId,bpi.company_nameASsupplier,bpi.purchase_typeASpurchaseType,CASEWHENbpi.winning_bid_amountISNULLTHENbpi.bid_priceELSEbpi.winning_bid_amountENDASwinningBidAmountFROMbid_project_info bpi

方案三:使用IFNULL()函数(MySQL、SQLite等)

SELECTbpi.batch_idASbatchId,bpi.batch_nameASbatchName,bpi.plate_nameASplateName,bpi.categoryASproductType,bpi.product_idASproductId,bpi.product_nameASproductName,bpi.opening_timeASopeningTime,bpi.section_idASsectionId,bpi.section_nameASsectionName,bpi.company_idAScompanyId,bpi.company_nameASsupplier,bpi.purchase_typeASpurchaseType,IFNULL(bpi.winning_bid_amount,bpi.bid_price)ASwinningBidAmountFROMbid_project_info bpi

方案四:使用ISNULL()函数(SQL Server)

SELECTbpi.batch_idASbatchId,bpi.batch_nameASbatchName,bpi.plate_nameASplateName,bpi.categoryASproductType,bpi.product_idASproductId,bpi.product_nameASproductName,bpi.opening_timeASopeningTime,bpi.section_idASsectionId,bpi.section_nameASsectionName,bpi.company_idAScompanyId,bpi.company_nameASsupplier,bpi.purchase_typeASpurchaseType,ISNULL(bpi.winning_bid_amount,bpi.bid_price)ASwinningBidAmountFROMbid_project_info bpi

📌 各方案对比

方案函数适用数据库特点
方案一COALESCE()所有主流数据库(标准SQL)最通用,可处理多个参数,返回第一个非NULL值
方案二CASE WHEN所有数据库最灵活,可处理复杂条件
方案三IFNULL()MySQL、SQLite、MariaDB简洁,但只适用于特定数据库
方案四ISNULL()SQL ServerSQL Server专用

💡 推荐与说明

推荐使用方案一的COALESCE()函数,原因如下:

  1. 标准化:COALESCE()是 SQL 标准函数,在所有主流数据库(MySQL、PostgreSQL、Oracle、SQL Server、SQLite等)中都可用
  2. 可扩展性:可以处理多个字段的优先级,例如:
    COALESCE(bpi.winning_bid_amount,bpi.bid_price,bpi.estimate_price,0)ASwinningBidAmount
    (依次尝试 winning_bid_amount、bid_price、estimate_price,都为空则返回 0)
  3. 简洁性:代码比CASE WHEN更简洁

🔍 完整查询示例

SELECTbpi.batch_idASbatchId,bpi.batch_nameASbatchName,bpi.plate_nameASplateName,bpi.categoryASproductType,bpi.product_idASproductId,bpi.product_nameASproductName,bpi.opening_timeASopeningTime,bpi.section_idASsectionId,bpi.section_nameASsectionName,bpi.company_idAScompanyId,bpi.company_nameASsupplier,bpi.purchase_typeASpurchaseType,-- 如果winning_bid_amount为空,则使用bid_priceCOALESCE(bpi.winning_bid_amount,bpi.bid_price)ASwinningBidAmountFROMbid_project_info bpiWHERE...-- 可以添加其他查询条件ORDERBY...-- 可以添加排序

⚠️ 注意事项

  1. 确保bid_price字段存在于bid_project_info表中
  2. 如果bid_price也可能为 NULL,可以使用嵌套的COALESCE()或设置默认值:
    COALESCE(bpi.winning_bid_amount,bpi.bid_price,0)ASwinningBidAmount
  3. 数据类型要兼容:winning_bid_amount和bid_price应该是相同或兼容的数据类型(如都是 DECIMAL、FLOAT 等)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 15:42:56

别再纠结哪个AI做PPT靠谱!“轻竹办公AIPPT”一站式解

别再纠结哪个AI做PPT靠谱!“轻竹办公AIPPT”一站式解决在职场和校园生活中,制作PPT是一项常见却又让人头疼的任务。很多人都有过这样的经历:内容已经准备好,却不知道如何快速整理成一份结构清晰、重点突出的PPT。从空白页开始搭建…

作者头像 李华
网站建设 2026/9/12 9:09:41

事务中的隔离性是如何保证的呢?(你解释一下MVCC)

事务的隔离性通过锁和多版本并发控制(MVCC)来保证。MVCC通过维护数据的多个版本来避免读写冲突。底层实现包括隐藏字段、undo log和read view。隐藏字段包括trx_id和roll_pointer。undo log记录了不同版本的数据,通过roll_pointer形成版本链。…

作者头像 李华
网站建设 2026/9/12 9:09:40

既然强转会报错,java为啥不封装处理好,避免强转报错?

✅ 用【大白话 人话】彻底讲懂,不讲原理、只讲结论、保证听懂,0 基础也能明白!你不懂太正常了,这个问题本身就是 Java 的反直觉坑,咱们抛开所有专业术语,只说人话、只讲你关心的「为什么」和「怎么办」&am…

作者头像 李华
网站建设 2026/9/21 21:37:00

一文彻底搞懂算力计算:CPU与GPU的核心方法全解析

在AI大模型训练/推理、高性能计算(HPC)、数据中心运维等场景中,“算力”是衡量硬件性能的核心指标,也是方案选型、成本评估的关键依据。但很多开发者对算力的理解仅停留在“TOPS”“FLOPS”等名词层面,不清楚其具体计算…

作者头像 李华
网站建设 2026/9/17 17:26:27

搞定JAX高效并行训练

💓 博客主页:借口的CSDN主页 ⏩ 文章专栏:《热点资讯》 搞定JAX高效并行训练:从理论到实战的深度探索目录搞定JAX高效并行训练:从理论到实战的深度探索 引言:为何JAX并行训练是AI工程的分水岭 一、JAX并行训…

作者头像 李华
网站建设 2026/9/25 7:46:33

如何在liunx环境安装PageAdmin Cms系统

web系统一般建议安装在srv/wwwoot目录下,下面步骤演示如何安装pageadmin版本。 1、进入srv目录,创建wwwroot/demo目录,生产环境demo替换为网站标识或域名标识,方便后期识别。2、上传web文件zip压缩包到 /srv/wwwroot/demo目录下解…

作者头像 李华