如何编写SQL查询选取一张表全量行与另一张表未匹配行?
SQL查询:合并指定行数据
表信息与数据
有两张表UPPER和LOWER,LOWER的Value是UPPER中部分Value的小写形式,属于其子集。
UPPER表数据
| ID | Value |
|---|---|
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | D |
LOWER表数据
| ID | Value |
|---|---|
| 1 | c |
| 2 | d |
需求与预期结果
需要通过Join操作,保留LOWER中的所有Value,同时保留UPPER中没有对应小写的Value,最终输出结果如下:
| ID | Value |
|---|---|
| 1 | A |
| 2 | B |
| 3 | c |
| 4 | d |
实现SQL语句
SELECT u.ID, COALESCE(l.Value, u.Value) AS Value FROM UPPER u LEFT JOIN LOWER l ON LOWER(u.Value) = l.Value;
语句说明
- 以
UPPER表为基础,用LEFT JOIN关联LOWER表,关联规则是UPPER的Value转小写后与LOWER的Value一致,以此匹配对应的小写值。 COALESCE函数优先选取匹配到的LOWER表Value,未匹配时则使用UPPER表的原Value,刚好满足需求。
内容的提问来源于stack exchange,提问作者VDev
相关产品推荐
相关产品推荐

