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
相关产品推荐
相关产品推荐

