【dz-1165】基于单片机无线照明控制系统设计
2026/1/16 9:30:21
您可以使用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 bpiCASE 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 bpiIFNULL()函数(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 bpiISNULL()函数(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 Server | SQL Server专用 |
推荐使用方案一的COALESCE()函数,原因如下:
COALESCE()是 SQL 标准函数,在所有主流数据库(MySQL、PostgreSQL、Oracle、SQL Server、SQLite等)中都可用COALESCE(bpi.winning_bid_amount,bpi.bid_price,bpi.estimate_price,0)ASwinningBidAmount(依次尝试 winning_bid_amount、bid_price、estimate_price,都为空则返回 0)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...-- 可以添加排序bid_price字段存在于bid_project_info表中bid_price也可能为 NULL,可以使用嵌套的COALESCE()或设置默认值:COALESCE(bpi.winning_bid_amount,bpi.bid_price,0)ASwinningBidAmountwinning_bid_amount和bid_price应该是相同或兼容的数据类型(如都是 DECIMAL、FLOAT 等)