如何从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
相关产品推荐
相关产品推荐

