订阅更新

净现值查询:查不到就当 0

SQL 实战 123 题 · 第 107 题 中等 约 2 分钟读完

LeetCode 1421 · 复合键 LEFT JOIN、默认值

本文目录
  1. 面试怎么回答
  2. 题意
  3. 表结构
  4. 思路
  5. 参考解法
  6. 易错点

面试怎么回答

Queries LEFT JOIN NPV ON id 和 year 都相等,IFNULL(npv, 0)。复合键关联要把所有键都写进 ON,漏一个就会产生错误的多对多匹配。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

题意

NPV 表记录每个存货 ID 在某年的净现值,查询表是一批(ID, 年份)查询。返回每条查询对应的净现值,NPV 表里没有的记为 0。

表结构

  • NPV:id、year、npv;(id, year) 为主键
  • Queries:id、year;(id, year) 为主键

思路

以查询表为主表,按(ID, 年份)两个字段 LEFT JOIN NPV 表,没有匹配的用 IFNULL 补 0。

参考解法

select q.id,q.year,ifnull(npv,0) npv
from Queries q left join NPV n
on q.id = n.id and q.year = n.year

易错点

  • 只按 id 关联会匹配到其他年份的净现值。
刷题进度保存在当前浏览器