2013-07-15 43 views
1

我有一個Oracle數據庫〜50表。表的外鍵到表x

現在,我正在尋找帶有'xyz'表的外鍵的所有表。 有沒有辦法做到這一點?

問候, LEA

回答

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。

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 
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 
0

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


+0

的OP明確指出他們正在使用Oracle。在這種情況下,[sql]是指Ansi標準語言,而不是MS SQL Server的簡稱。 – APC