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

如何获取未与其他表建立外键关联的父表ID

解决方法:获取未关联外键的父表ID

首先,咱们先明确你的核心需求:要找**本身是父表(包含主键字段)且没有外键字段(即不与其他表建立外键关联)**的表ID,预期结果是1。

你现有SQL的问题

你尝试的两个SQL方向完全反了——它们都是在查询存在外键字段的表ID,所以得到的是2和3,自然不符合预期:

  • SELECT DISTINCT table_id FROM tables_structure WHERE fk!='':直接筛选出有外键字段的表
  • SELECT table_id FROM tables_structure WHERE fk!='' GROUP BY table_id HAVING fk!='':本质和第一个SQL一致,只是多了分组操作,结果还是带外键的表

正确的SQL写法

这里提供两种清晰可行的写法,都能得到你要的结果1:

方法1:用NOT EXISTS子查询(逻辑更直观)

先筛选出所有父表(有主键字段的表),再排除那些自身存在外键字段的表:

SELECT DISTINCT ts.table_id
FROM tables_structure ts
WHERE ts.PK = 'pk'
AND NOT EXISTS (
    SELECT 1
    FROM tables_structure ts2
    WHERE ts2.table_id = ts.table_id
    AND ts2.FK = 'fk'
)

方法2:用GROUP BY + HAVING(聚合筛选)

通过分组聚合,一次性判断每个表是否是父表,且没有外键字段:

SELECT table_id
FROM tables_structure
GROUP BY table_id
HAVING MAX(PK) = 'pk' -- 确保该表是父表(包含主键字段)
AND MAX(FK) IS NULL   -- 确保该表没有任何外键字段

逻辑说明

  • 父表定义:我们默认包含PK='pk'记录的表是父表(这类表通常有主键供其他表关联)
  • 筛选逻辑:从父表中剔除有FK='fk'记录的表,剩下的就是没有外键关联的父表,也就是你要的1

内容的提问来源于stack exchange,提问作者TAHER El Mehdi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:07:36