news 2026/5/8 23:43:43

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_amountbid_price应该是相同或兼容的数据类型(如都是 DECIMAL、FLOAT 等)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 17:59:15

Day01-07.搭建项目环境-测试部署的微服务14:20

就是之前做过的那个单体项目,小程序,的微服务版本,加了一些主流技术栈,挺好的,可以上手实操看看。把学过的技术栈实操看看。每次工作有时间了,就学点新技术没时间也要创造时间,目前就是创造时间…

作者头像 李华
网站建设 2026/5/6 22:42:16

Agent搭建-超详细教程,存一下吧

AI Agent在于其能自动执行复杂任务,大幅提升自动化和智能决策的效率,让任务自动化,主要包括感知、记忆、规划与决策、行动/使用工具。 AI Agent的工作原理分为几个步骤。 ✔首先是感知,AI Agent通过传感器感知物理或虚拟环境中的变…

作者头像 李华
网站建设 2026/5/4 14:42:05

Spring家族生态深度剖析:从厨房新手到餐饮帝国的演进史

文章目录一、Spring的诞生:从"厨房杂活"到"控制反转"二、Spring Boot:约定优于配置的"快餐车革命"三、Spring Cloud:从快餐车到餐饮帝国的进化四、Spring的现代化演进:响应式与云原生五、实战场景&…

作者头像 李华
网站建设 2026/5/2 8:39:47

2026机器视觉同轴光源品牌甄选指南:解锁高精度检测的照明密钥

在智能制造与工业自动化飞速发展的今天,机器视觉系统已成为现代工业的“智慧之眼”。而同轴光源作为这一“眼睛”的核心照明系统,其性能直接决定了视觉检测的精度与可靠性。面对2026年工业检测对精度、效率和稳定性提出的更高要求,选择一款真…

作者头像 李华
网站建设 2026/4/30 12:54:10

go语言对phone脱敏显示

在Go语言中实现手机号脱敏显示主要有以下几种方式,从简单到完整逐步推荐: 一、基础实现(字符串切片) 最常用且高效的方式是直接使用字符串切片操作,保留前3位和后4位,中间用*替换: go 复制 …

作者头像 李华