SQLite中如何使用一张查找表关联另一张表的多个字段
SQLite 多字段关联同一张查找表保留空值实现方案
实现逻辑
要实现SwitchLinkage表三个外键字段同时关联Switch表且保留全部空值,核心是三次使用LEFT JOIN关联Switch表,每次关联赋予唯一别名,避免字段冲突同时保证原表所有行不被过滤。
可用SQL语句
SELECT -- 源开关相关字段 sl.SourceSwitchID AS 源开关ID, src_sw.Name AS Name_SourceSwitch, src_sw.AsgnCode AS AsgnCode_SourceSwitch, -- 目标开关相关字段 sl.DestSwitchID AS 目标开关ID, dest_sw.Name AS 目标开关名称, dest_sw.AsgnCode AS 目标开关分配码, -- 条件开关相关字段 sl.ConditionSwitchID AS 条件开关ID, cond_sw.Name AS 条件开关名称, cond_sw.AsgnCode AS 条件开关分配码, -- 保留SwitchLinkage其余所有字段 sl.* FROM SwitchLinkage sl -- 第一次左连接关联源开关 LEFT JOIN Switch src_sw ON sl.SourceSwitchID = src_sw.SwitchID -- 第二次左连接关联目标开关 LEFT JOIN Switch dest_sw ON sl.DestSwitchID = dest_sw.SwitchID -- 第三次左连接关联条件开关 LEFT JOIN Switch cond_sw ON sl.ConditionSwitchID = cond_sw.SwitchID;
关键说明
- 必须使用
LEFT JOIN,不能用INNER JOIN:INNER JOIN会过滤掉SwitchLinkage中三个外键字段为NULL的行,LEFT JOIN可以完整保留原表所有行,关联不到的Switch属性自动返回NULL,符合保留空值的要求 - 每次关联Switch表必须指定不同的别名(示例中用src_sw、dest_sw、cond_sw):否则SQL无法区分返回的字段属于哪一次关联的Switch表
- 如果不需要返回SwitchLinkage的全部字段,可以把
sl.*替换为你需要保留的指定字段即可
内容的提问来源于stack exchange,提问作者Pharny
相关产品推荐
相关产品推荐

