You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于值映射的SQLite表JOIN实现(Python环境)

解决SQLite中基于自定义映射的表关联问题

针对你提出的需求——在不修改表数据的前提下,基于预设的1→a、2→b、3→c映射关系关联表A和表B,这里提供几种简洁的SQLite查询方案:

方案1:使用CASE表达式动态转换表A的列值

直接在JOIN条件里用CASE把表A的数字f值转换成对应的字母,再和表B的f列匹配:

SELECT A.m AS A_m, A.f AS A_f, B.f AS B_f, B.m AS B_m
FROM A
INNER JOIN B ON 
    CASE A.f
        WHEN 1 THEN 'a'
        WHEN 2 THEN 'b'
        WHEN 3 THEN 'c'
    END = B.f;

方案2:使用CASE表达式动态转换表B的列值

反过来,把表B的字母f值转换成对应的数字,再和表A的f列匹配,逻辑和方案1一致,只是转换方向不同:

SELECT A.m AS A_m, A.f AS A_f, B.f AS B_f, B.m AS B_m
FROM A
INNER JOIN B ON 
    A.f = CASE B.f
        WHEN 'a' THEN 1
        WHEN 'b' THEN 2
        WHEN 'c' THEN 3
    END;

方案3:临时映射表(适合复杂/可变的映射规则)

如果你的映射关系后续可能变动,或者规则更复杂,创建一个临时映射表会让查询更易维护:
首先创建并填充临时映射表:

CREATE TEMP TABLE mapping (num_val INTEGER, char_val TEXT);
INSERT INTO mapping VALUES (1, 'a'), (2, 'b'), (3, 'c');

然后通过三次关联实现查询:

SELECT A.m AS A_m, A.f AS A_f, B.f AS B_f, B.m AS B_m
FROM A
INNER JOIN mapping ON A.f = mapping.num_val
INNER JOIN B ON mapping.char_val = B.f;

结果验证

执行上述任意一种方案,都会得到你期望的关联结果:

A_mA_fB_fB_m
a11ab1
a33cb2

所有方案都不需要修改表A或表B中的原始数据,完全通过查询逻辑实现自定义映射的关联。

内容的提问来源于stack exchange,提问作者Bazman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:09:59