Sql 带有表x的ForeignKey的表
我有一个Oracle数据库,有大约50个表 现在,我正在查找表“xyz”具有外键的所有表。 有办法做到这一点吗 您好,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
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的简写。