Sql 带有表x的ForeignKey的表

Sql 带有表x的ForeignKey的表,sql,oracle,select,foreign-keys,Sql,Oracle,Select,Foreign Keys,我有一个Oracle数据库,有大约50个表 现在,我正在查找表“xyz”具有外键的所有表。 有办法做到这一点吗 您好, Lea外键引用主键或唯一键,而不是表。因此,第一件事是为XYZ建立主键。然后我们可以查找引用它的外键 select p.constraint_name , p.constraint_type , f.owner , f.table_name , f.constraint_name from all_constr

我有一个Oracle数据库,有大约50个表

现在,我正在查找表“xyz”具有外键的所有表。 有办法做到这一点吗

您好,
Lea

外键引用主键或唯一键,而不是表。因此,第一件事是为XYZ建立主键。然后我们可以查找引用它的外键

 select p.constraint_name
        , p.constraint_type
        , f.owner
        , f.table_name
        , f.constraint_name
 from all_constraints p
      left join all_constraints f
      on ( f.r_constraint_name = p.constraint_name)
 where p.table_name = 'XYZ'
 and p.constraint_type in ('P', 'U')
 and f.constraint_type = 'R'

我将其作为外部联接来执行,因此即使没有表引用XYZ上的键,它也会返回一些内容。您的表可能被其他架构中的表引用。这就是我建议使用所有约束而不是用户约束的原因。

看起来,您可以查询用户约束视图,比如

select fk.table_name from all_constraints fk , all_constraints pk
where 
pk.table_name = 'XYZ'
and fk.constraint_type = 'R'
and fk.r_constraint_name = pk.constraint_name
select distinct Table_Name
           from User_Constraints 
          where Constraint_Type = 'R' and
                R_Constraint_Name in ( 
                    select Constraint_Name
                      from User_Constraints
                     where Constraint_Type = 'P' and
                           Table_Name = Upper('xyz')) -- <- Your table name
       order by Table_Name -- <- may be redundant
对于sql,请尝试以下操作:

SELECT K.TABLE_NAME , K.COLUMN_NAME , K.CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K ON C.TABLE_NAME = K.TABLE_NAME AND C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG AND C.CONSTRAINT_SCHEMA = K.CONSTRAINT_SCHEMA AND C.CONSTRAINT_NAME = K.CONSTRAINT_NAME WHERE C.CONSTRAINT_TYPE = 'FOREIGN KEY' /*FOR FOREIGN KEY U NEED TO REPLACE CONSTRAINT_TYPE WITH FOREIGN KEY*/ AND K.COLUMN_NAME IN ( SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS )
OP明确表示他们正在使用Oracle。在本例中,[sql]是指Ansi标准语言,而不是MS sql Server的简写。