>我正在尝试找出如何查找外键引用的列的名称。
下面是一个演示示例,请记住,我正在尝试为数百个表动态查找此内容。
- 控件
- 身份证
- COMPONENT_ID
- 。
- .PART
- 身份证
- 名字
- ....
WIDGET.COMPONENT_ID
是PART.ID
的外键
我有一个查询来查找PART
(表名(,但我无法弄清楚如何从WIDGET_COMPONENT_ID
中找到PART.ID
。
编辑:
我正在尝试找出引用的列名称。 我可以找到表名,但无法弄清楚如何找到列名。
编辑2:
(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
虽然我不确定。
此查询帮助我获取了所需的信息:
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'
)