【问题标题】:How to find reference column of foreign in key in Oracle? [duplicate]如何在Oracle中找到外键的引用列? [复制]
【发布时间】:2018-10-07 16:08:44
【问题描述】:

我试图弄清楚如何查找外键引用的列的名称。

这是一个演示示例,请记住,我正在尝试动态查找数百个表。

  • 小工具
    • 身份证
    • COMPONENT_ID
    • ...
  • 部分
    • 身份证
    • 姓名
    • ....

WIDGET.COMPONENT_IDPART.ID 的外键

我有一个查询要查找 PART(表名),但我不知道如何从 WIDGET_COMPONENT_ID 找到 PART.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_FKPART 的信息。如何从COMPONENT_ID_FKPART.ID 虽然我不确定。

【问题讨论】:

  • @Corion 实际上不是。我找到的最接近的是stackoverflow.com/questions/1729996/…,但它只会让你得到表名而不是被引用的列
  • 哦,确实,这只是答案的一半。一个约束可以有多个列名,因此您还需要通过 docs.oracle.com/cd/B28359_01/server.111/b28320/… 查找该约束。如果你有一个表+约束的例子,我可以通过 SQLFiddle 提供一个解决方案,所以可以发布吗?
  • @Corion 更新了更多信息
  • @bob-jaris,这个问题是我链接到的那个问题的欺骗,它只返回表名,而不是该表名中主键列的名称。这就是我要问的问题

标签: sql oracle


【解决方案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' )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2010-11-27
    • 2011-04-19
    • 1970-01-01
    相关资源
    最近更新 更多