SQL JOIN时提取Table A中ID列逗号左侧首个值进行关联的方案
解决方案:提取Table A首个ID关联并去重Table B记录
修改后的SQL语句
SELECT a.name, b.Company FROM TableA a INNER JOIN ( -- 对Table B按ID分组,每个ID仅保留一条Company记录(此处取字典序最小的Company) SELECT ID, MIN(Company) AS Company FROM TableB GROUP BY ID ) b ON b.id = CASE WHEN CHARINDEX(',', a.id) > 0 THEN LEFT(a.id, CHARINDEX(',', a.id) - 1) ELSE a.id END WHERE b.id IS NOT NULL
关键逻辑说明
- 提取Table A的首个ID:通过
CHARINDEX判断ID字段是否包含逗号,若存在则用LEFT截取逗号前的子串作为关联ID;无逗号则直接使用原ID。 - 去重Table B的重复ID:利用
GROUP BY ID分组,结合MIN(Company)确保每个ID仅对应一条Company记录,避免关联后出现重复结果。 - 关联与筛选:通过INNER JOIN匹配处理后的ID,
WHERE子句确保只保留成功关联的记录。
预期执行结果
| name | Company |
|---|---|
| Bob | Kroc |
内容的提问来源于stack exchange,提问作者Damien
相关产品推荐
相关产品推荐

