我试图弄清楚如何查找外键引用的列的名称。
这是一个示例,请记住,我正在尝试动态查找数百张表。
WIDGET.COMPONENT_ID
是PART.ID
我有一个查询来找到PART
(表名),但是我不知道如何从PART.ID
中找到WIDGET_COMPONENT_ID
。
编辑:
我正试图找出引用的列名。我可以找到表名,但不知道如何找到列名。
编辑2:
(来自List of foreign keys and the tables they reference的sql) 例如,我可以通过以下方式获取约束名称:
SELECT c_pk.constraint_name, c_pk.table_name r_table_name
FROM all_cons_columns a
JOIN all_constraints c ON a.owner = c.owner
AND a.constraint_name = c.constraint_name
JOIN all_constraints c_pk ON c.r_owner = c_pk.owner
AND c.r_constraint_name = c_pk.constraint_name
WHERE c.constraint_type = 'R'
AND a.table_name = 'WIDGET'
这使我得到诸如COMPONENT_ID_FK
和PART
之类的东西。尽管不确定,如何从COMPONENT_ID_FK
转到PART.ID
。
答案 0 :(得分:1)
此查询帮助我获得了所需的信息:
SELECT *
FROM all_cons_columns
WHERE constraint_name IN (
SELECT c_pk.constraint_name
FROM all_cons_columns a
JOIN all_constraints c ON a.owner = c.owner
AND a.constraint_name = c.constraint_name
JOIN all_constraints c_pk ON c.r_owner = c_pk.owner
AND c.r_constraint_name = c_pk.constraint_name
WHERE c.constraint_type = 'R'
AND a.column_name = 'COMPONENT_ID'
AND a.table_name = 'WIDGET'
)