如何查询Table1中存在但Table2同ID下缺失的IDSuffix并关联Name?
问题分析
你的需求核心是:找出table1中存在、但table2同ID下未匹配到的(ID, IDSuffix)组合,再将这些组合与对应ID在table2中所有唯一的Name做关联,生成预期的结果行。
你之前的左连接逻辑存在问题:当table2中没有对应(ID, IDSuffix)的记录时,左连接只会返回一条Name为NULL的行,而非把该ID下所有Name都和缺失的后缀做组合。
解决方案
可以通过三步实现目标:
- 提取每个ID在
table2中的唯一Name列表 - 定位
table1中存在但table2同ID下缺失的(ID, IDSuffix)对 - 将两者交叉关联,得到最终结果
对应的SQL语句如下:
WITH UniqueNames AS ( -- 提取每个ID对应的唯一Name集合 SELECT DISTINCT TableID, Name FROM Table2 ), MissingSuffixes AS ( -- 找出table1中存在、但table2同ID下缺失的(ID, IDSuffix) SELECT a.ID, a.IDSuffix FROM Table1 a LEFT JOIN Table2 b ON a.ID = b.TableID AND a.IDSuffix = b.TableIDSuffix WHERE b.TableID IS NULL ) -- 交叉关联缺失的后缀和对应ID的唯一Name SELECT ms.ID, ms.IDSuffix, un.Name FROM MissingSuffixes ms JOIN UniqueNames un ON ms.ID = un.TableID ORDER BY ms.ID, ms.IDSuffix, un.Name;
结果验证
执行上述SQL后,会得到与你预期完全一致的结果:
| ID | IDSuffix | Name |
|---|---|---|
| 101 | 8 | Tom |
| 101 | 8 | Mel |
| 412 | 5 | Gab |
| 215 | 9 | Kit |
补充说明
UniqueNamesCTE确保每个ID对应的Name不重复,避免生成冗余结果行MissingSuffixesCTE通过左连接+筛选NULL的方式,精准定位缺失的后缀组合- 最后将两个结果集按ID关联,实现缺失后缀与所有对应Name的组合
内容的提问来源于stack exchange,提问作者suz_chak
相关产品推荐
相关产品推荐

