SQL新手求助:基于多ID列关联查询生成目标结果表
解决IND表关联REF表生成RES表的SQL问题
嘿,刚接触SQL的话,这种多字段关联确实容易卡壳,我来给你捋清楚怎么写这个SELECT语句~
首先咱们先明确需求:把IND表中的ID1、ID2、ID3分别对应到REF表的ID,替换成对应的V值,空的ID位置就保留为空,最终得到RES表的结果。
核心思路:多次LEFT JOIN
因为IND表的每个ID字段都需要单独关联REF表,而且要保留原IND表的所有行(哪怕某些ID字段是空的),所以我们需要对REF表做三次LEFT JOIN,分别对应ID1、ID2、ID3三个字段。
完整SQL语句
SELECT r1.V AS ID1, r2.V AS ID2, r3.V AS ID3 FROM IND LEFT JOIN REF r1 ON IND.ID1 = r1.ID LEFT JOIN REF r2 ON IND.ID2 = r2.ID LEFT JOIN REF r3 ON IND.ID3 = r3.ID;
语句细节解释
LEFT JOIN REF r1 ON IND.ID1 = r1.ID:把IND表的ID1和REF表的ID关联,取对应的V值作为新的ID1列;如果IND的ID1是空的,这里就返回NULL(对应结果里的空值)。- 同理,
r2和r3分别对应ID2和ID3的关联逻辑,用别名区分三次关联的REF表,避免字段冲突。 - LEFT JOIN的优势就是会保留原表(IND)的所有行,哪怕关联不上REF表的ID,也不会丢失数据。
执行结果验证
运行上面的语句后,得到的结果和你期望的RES表完全一致:
| ID1 | ID2 | ID3 |
|---|---|---|
| 10 | 20 | |
| 30 | 40 | |
| 50 | ||
| 60 | 70 |
以后遇到多个字段需要关联同一张表的情况,都可以用这种多次LEFT JOIN的思路哦~
内容的提问来源于stack exchange,提问作者Krisselack
相关产品推荐
相关产品推荐

