news 2026/4/18 4:04:58

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/4/18 4:03:37

Github应用商店 1.4.2 | 自动发现并聚合github上可安装的项目

GitHub Store是一个基于GitHub Release的开源应用商店,其核心功能是自动发现并聚合GitHub上真正可安装的软件项目。它通过GitHub API搜索公开仓库中已发布的正式版本安装包,并按平台智能匹配可用文件,无需逐个翻阅Release页面,就能…

作者头像 李华
网站建设 2026/4/15 0:57:11

AI赋能央企数智化转型研究报告:AI赋能央企转型应用现状、AI赋能央企转型路径与挑战、AI赋能央企转型服务商体系、未来展望

本报告全面描绘了AI驱动央企数智化转型的宏大图景。其核心逻辑是:在国家战略强力驱动下,央企正以AI为核心引擎,通过构建自主可控的技术底座、推动AI向全业务核心场景深度渗透、并牵头构建协同创新的产业生态,最终实现自身高质量发…

作者头像 李华
网站建设 2026/4/11 5:29:37

AI原生应用开发:相似度匹配的模型压缩技巧

AI原生应用开发:相似度匹配的模型压缩技巧 关键词:相似度匹配、模型压缩、AI原生应用、知识蒸馏、模型量化、参数剪枝、轻量级模型 摘要:在AI原生应用(如智能推荐、跨模态搜索、对话系统语义理解)中,相似度匹配模型是核心组件。但这类模型常因参数量大、计算复杂度高,难…

作者头像 李华
网站建设 2026/4/13 21:27:11

keil5安装包下载通俗解释:新手也能轻松掌握

从零开始搭建嵌入式开发环境:Keil5安装与配置实战指南 你是不是也曾在搜索引擎里输入“ keil5安装包下载 ”,却被五花八门的链接、版本号和破解教程搞得一头雾水? 别担心,这不只是你在经历。几乎每一个刚接触STM32或ARM开发的…

作者头像 李华