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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:42:02