2017-05-04 53 views
0

我是oracle新手,我正在處理需要在兩個表之間獲取約束並將值作爲另一個輸入發送的表。查詢以獲得父表和子表之間的約束

Table 1 
    |_ Column1_pk 
    |_ Column2 (foreign key to Table 2) 

Table 2 
    |_column2 

所以我想取表1和列的主鍵,其中有2個表

+1

這是一個MySQL的問題,一個Oracle問題,或SQL Server的問題嗎?你有三個標籤,但它們是完全不同的產品,對這個問題的答案完全不同。 – pmbAustin

回答

2

您需要查詢字典視圖USER_CONSTRAINTSUSER_CONS_COLUMNS之間的關係。例如:

DEPT有一個主鍵,而表EMP有一個指向DEPT的外鍵。首先我們找到約束名稱,然後找到主鍵DEPT的列。然後,使用約束名稱,我們找到約束名稱,然後找到EMP的外鍵列。

select table_name, constraint_name, constraint_type 
from user_constraints 
where table_name  = 'DEPT' 
    and constraint_type = 'P' 
; 

TABLE_NAME CONSTRAINT_NAME CONSTRAINT_TYPE 
---------- --------------- --------------- 
DEPT  PK_DEPT   P 

select constraint_name, table_name, column_name, position 
from user_cons_columns 
where constraint_name = 'PK_DEPT' 
; 

CONSTRAINT_NAME TABLE_NAME COLUMN_NAME POSITION 
--------------- ---------- ----------- -------- 
PK_DEPT   DEPT  DEPTNO    1 

然後

select table_name, constraint_name, constraint_type 
from user_constraints 
where table_name  = 'EMP' 
    and r_constraint_name = 'PK_DEPT' 
; 

TABLE_NAME CONSTRAINT_NAME CONSTRAINT_TYPE 
---------- --------------- --------------- 
EMP   FK_DEPTNO  R 

select constraint_name, table_name, column_name, position 
from user_cons_columns 
where constraint_name = 'FK_DEPTNO' 
; 

CONSTRAINT_NAME TABLE_NAME COLUMN_NAME POSITION 
--------------- ---------- ----------- -------- 
FK_DEPTNO  EMP   DEPTNO    1