如何从Jobs表及未在Jobs表的tempItems表获取指定数据?
实现思路与SQL语句
表结构与数据
Jobs表
| JobID | Item | QTY |
|---|---|---|
| 0007 | Test 1 | 1 |
| 0007 | Test 2 | 1 |
tempItems表
| Item | QTY |
|---|---|
| Test 1 | 0 |
| Test 2 | 0 |
| Test 3 | 0 |
| Test 4 | 0 |
核心思路
以tempItems表的所有Item为基础,关联Jobs表的对应数据:
- 若Item在
Jobs表中存在,取Jobs表的QTY值 - 若Item在
Jobs表中不存在,保留tempItems表的QTY值(即0)
实现SQL语句
SELECT ti.Item, COALESCE(j.QTY, ti.QTY) AS QTY, CASE WHEN j.JobID IS NOT NULL THEN '<-- from jobs table' ELSE '<-- from tempItems table' END AS (explanation) FROM tempItems ti LEFT JOIN Jobs j ON ti.Item = j.Item;
语句说明
LEFT JOIN:以tempItems(别名ti)为主表,左连接Jobs表(别名j),关联条件为两张表的Item字段相等,确保保留tempItems的所有记录,同时匹配Jobs中存在的Item。COALESCE(j.QTY, ti.QTY):优先取Jobs表的QTY值,若该值为空(即Item不在Jobs表中),则使用tempItems表的QTY值,完全匹配需求的取值规则。CASE语句:通过判断Jobs表的关联字段是否为空,生成对应的来源说明文本。
内容的提问来源于stack exchange,提问作者Bill E
相关产品推荐
相关产品推荐

