You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL:关联两表时如何返回所有行(含无匹配值行)

解决方案:Oracle SQL左连接实现需求

这问题其实用左外连接就能轻松搞定,再配合Oracle的NVL函数处理空值,就能得到你想要的结果集。具体思路如下:

  • 我们需要保留categories表中的所有类别(包括没有对应科目的cat3),所以选择左外连接(LEFT JOIN),将categories作为左表,关联subjects表中category字段与categories的Name字段匹配的行。
  • 对于没有匹配到科目的类别,subjects.Name会返回NULL,用NVL函数把这个NULL转换成空字符串'',就符合结果要求了。

对应的SQL查询语句如下:

SELECT 
    c.Name AS Category,
    NVL(s.Name, '') AS Subject
FROM 
    categories c
LEFT JOIN 
    subjects s ON c.Name = s.category
ORDER BY 
    c.Name, s.Name;

解释一下关键部分:

  • LEFT JOIN确保categories的每一行都会被保留,哪怕subjects里没有对应的数据。
  • NVL(s.Name, ''):如果s.Name是NULL(比如cat3没有对应科目),就返回空字符串,否则返回科目名称。
  • 最后加ORDER BY是为了让结果和你给出的示例顺序一致,当然如果不需要严格顺序也可以去掉。

内容的提问来源于stack exchange,提问作者help

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:57:11