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

如何从Derby数据库获取完整外键信息?

如何在Derby数据库中获取外键关联列信息?

在标准SQL中,我通常使用以下语句获取外键的完整信息:

SELECT
    TABLE_SCHEMA as fromSchema,
    TABLE_NAME as fromTable,
    COLUMN_NAME as fromColumn,
    REFERENCED_TABLE_SCHEMA as toSchema,
    REFERENCED_TABLE_NAME as toTable,
    REFERENCED_COLUMN_NAME as toColumn
FROM information_schema.key_column_usage col
where REFERENCED_COLUMN_NAME is not null
  and REFERENCED_TABLE_NAME is not null
  and REFERENCED_TABLE_SCHEMA is not null

但在Derby数据库中,我无法找到获取fromColumn(外键所在列)和toColumn(关联的主键列)的方法,查阅Derby官方文档后仍无头绪。

我尝试了以下查询语句,只能获取到表和模式信息,无法获取关联列:

select FS.SCHEMANAME as "fromScheme",
       FT.TABLENAME  as "fromTable",
       TS.SCHEMANAME as "toScheme",
       TT.TABLENAME  as "toTable"
       -- How to get toColumn???
       -- How to get fromColumn???
from sys.SYSFOREIGNKEYS FK
         join SYS.SYSCONSTRAINTS S0 on FK.CONSTRAINTID = S0.CONSTRAINTID
         join SYS.SYSCONSTRAINTS S1 on FK.KEYCONSTRAINTID = S1.CONSTRAINTID
         join sys.SYSTABLES FT on S0.TABLEID = FT.TABLEID
         join sys.SYSSCHEMAS FS on FS.SCHEMAID = S0.SCHEMAID
         join sys.SYSTABLES TT on S1.TABLEID = TT.TABLEID
         join sys.SYSSCHEMAS TS on TS.SCHEMAID = S1.SCHEMAID;

为了排查问题,我创建了测试表并执行了系统表关联查询:

create schema test;
CREATE TABLE test.Course
(
    id   INTEGER     NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
    name VARCHAR(50) NOT NULL,
    CONSTRAINT primary_key PRIMARY KEY (id)
);

CREATE TABLE test.Student
(
    id        INTEGER     NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
    name      VARCHAR(50) NOT NULL,
    surname   VARCHAR(50) NOT NULL,
    faculty   VARCHAR(50) NOT NULL,
    course_id INTEGER     NOT NULL,
    CONSTRAINT student_pk PRIMARY KEY (id),
    CONSTRAINT student_fk FOREIGN KEY (course_id) REFERENCES test.course
);

select
    '----------SYS CONSTRAINTS---------------',
    C.*,
    '----------SYS FOREIGN KEYS---------------',
    F.*,
    '----------SYS CONGLOMERATES---------------',
    CON.*,
    '----------SYS TABLES---------------',
    T.*,
    '----------SYS SCHEMAS---------------',
    SC.*
from SYSCONSTRAINTS C
join SYS.SYSFOREIGNKEYS F on C.CONSTRAINTID = F.CONSTRAINTID
join sys.SYSCONGLOMERATES CON on CON.CONGLOMERATEID = F.CONGLOMERATEID
join sys.SYSTABLES T on T.TABLEID = CON.TABLEID
join sys.SYSSCHEMAS SC on SC.SCHEMAID = CON.SCHEMAID;

执行后返回了SYSCONSTRAINTS、SYSFOREIGNKEYS等系统表的信息,但依然没有包含外键关联的列名。

现寻求能获取fromColumn和toColumn信息的解决方案。

内容的提问来源于stack exchange,提问作者Uroš Jarc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 04:32:13