带表外键的表x

时间:2013-07-15 12:32:42

标签: sql oracle select foreign-keys

我有一个带有~50个表的Oracle-DB。

现在,我正在寻找带有'xyz'外键的所有表。 有没有办法做到这一点?

问候, 莉娅

4 个答案:

答案 0 :(得分:3)

外键引用主键(或唯一键),而不是表。首先要建立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'

我已经将其作为OUTER JOIN完成,因此即使没有表引用XYZ上的键,它也会返回一些内容。您的表可能被其他模式中的表引用。这就是为什么我建议使用ALL_CONSTRAINTS而不是USER_CONSTRAINTS。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

看来,您可以查询User_Constraints视图,例如

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

答案 3 :(得分:0)

for 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 )