如何查询引用指定表主键的所有外键列及所属表
查询引用指定主键的关联表及外键列
不同数据库存储外键元数据的系统表结构不同,直接执行对应数据库的SQL语句,就能得到符合格式要求的结果。
MySQL
将语句里的占位符替换为实际的库名、主键表名、主键列名后执行:
SELECT CONCAT(kcu.COLUMN_NAME, ', ', kcu.TABLE_NAME) FROM information_schema.KEY_COLUMN_USAGE kcu WHERE kcu.REFERENCED_TABLE_SCHEMA = '替换为你的数据库名' AND kcu.REFERENCED_TABLE_NAME = '替换为主键所在表名(即示例中的table 1)' AND kcu.REFERENCED_COLUMN_NAME = '替换为目标主键列名(即示例中的列A)' ORDER BY kcu.TABLE_NAME;
针对示例场景,执行后返回结果如下:
B, table 2 C, table 3
PostgreSQL
替换对应占位符后执行:
SELECT CONCAT(kcu.column_name, ', ', kcu.table_name) FROM information_schema.key_column_usage kcu WHERE kcu.table_catalog = '替换为你的数据库名' AND kcu.referenced_table_name = '替换为主键所在表名' AND kcu.referenced_column_name = '替换为目标主键列名' ORDER BY kcu.table_name;
SQL Server
替换对应占位符后执行:
SELECT CONCAT(fk_cols.name, ', ', fk_tables.name) FROM sys.foreign_keys fk INNER JOIN sys.tables pk_tables ON fk.referenced_object_id = pk_tables.object_id INNER JOIN sys.foreign_key_columns fk_cols_ref ON fk.object_id = fk_cols_ref.constraint_object_id INNER JOIN sys.columns fk_cols ON fk_cols_ref.parent_object_id = fk_cols.object_id AND fk_cols_ref.parent_column_id = fk_cols.column_id INNER JOIN sys.tables fk_tables ON fk.parent_object_id = fk_tables.object_id INNER JOIN sys.columns pk_cols ON fk_cols_ref.referenced_object_id = pk_cols.object_id AND fk_cols_ref.referenced_column_id = pk_cols.column_id WHERE pk_tables.name = '替换为主键所在表名' AND pk_cols.name = '替换为目标主键列名' ORDER BY fk_tables.name;
注意:执行账号需要有对应系统表的查询权限,否则会返回空结果。
内容的提问来源于stack exchange,提问作者Vaish
相关产品推荐
相关产品推荐

